2014-09-05
PHP的一个主要应用场合就是应用程序与数据库打交道的应用场景,所以一个应用中会存在大量的数据库操作,比如过数据库句柄来连接数据库这一行为,使用单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。
【单例模式的优点】
1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
4、允许可变数目的实例(多例模式)
5、比类操作更灵活
【单例模式适用场景】
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2、当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。
【单例模式与其它模式】
工厂方法模式(factory method模式):单例模式使用工厂模式来提供自己的实例。
抽象工厂模式(abstract factory模式):抽象工厂模式可以使用单例模式,将具体工厂类设计成单例类。
建造者模式(Builder模式):建造模式可以将具体建造类设计成单例模式
3.单例模式实例
3.1 test.php
SPAN style="FONT-SIZE: 14px"><?php class Test{ public $service; //静态成品变量 保存全局实例 private static $instance = null; //用mysqli连接数据库 private static $SDB_USER = "test"; private static $SDB_DBNAME="test"; private static $SDB_HOST = 'localhost'; private static $SDB_PASS = 'ddddYQ3ddddUxEY'; //私有化构造函数,防止外界实例化对象 private function __construct() { $this->service = new mysqli(self::$SDB_HOST, self::$SDB_USER, self::$SDB_PASS, self::$SDB_DBNAME); } //私有化克隆函数,防止外界克隆对象 private function __clone(){ } //静态方法, 单例统一访问入口 public static function getInstance() { if (!isset(self::$instance) || is_null(self::$instance)) { self::$instance = new Test(); } return self::$instance; } //测试方法: 打印hello,world public function sayHello() { echo 'hello,world'; } } </SPAN> <?phpclass Test{ public $service; //静态成品变量 保存全局实例 private static $instance = null; //用mysqli连接数据库 private static $SDB_USER = "test"; private static $SDB_DBNAME="test"; private static $SDB_HOST = 'localhost'; private static $SDB_PASS = 'ddddYQ3ddddUxEY'; //私有化构造函数,防止外界实例化对象 private function __construct() { $this->service = new mysqli(self::$SDB_HOST, self::$SDB_USER, self::$SDB_PASS, self::$SDB_DBNAME); } //私有化克隆函数,防止外界克隆对象 private function __clone(){ } //静态方法, 单例统一访问入口 public static function getInstance() { if (!isset(self::$instance) || is_null(self::$instance)) { self::$instance = new Test(); } return self::$instance; } //测试方法: 打印hello,world public function sayHello() { echo 'hello,world'; }}
3.2 data.php
SPAN style="FONT-SIZE: 14px"><?php require_once('test.php'); class TestObject { protected $test; function __construct($id=null) { $this->test = Test::getInstance(); $this->test->sayHello(); } } $obj = new TestObject();</SPAN> <?phprequire_once('test.php');class TestObject { protected $test; function __construct($id=null) { $this->test = Test::getInstance(); $this->test->sayHello(); } }
$obj = new TestObject();
运行data.php,结果:
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
1
CI框架连接数据库配置操作以及多数据库操作
09-05
2
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
05-17
3
C语言关键字及其解释介绍 C语言32个关键字详解
04-05
4
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
04-26
5
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
09-05
6
将视频设置为Android手机开机动画的教程
12-11
7
PHP中的(++i)前缀自增 和 (i++)后缀自增
09-05
8
常用dos命令及语法
09-27
PHP中include和require区别之我见
2014-09-05
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
2017-04-12
php递归返回值的问题
2014-09-05
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
2017-05-03
单片机编程好学吗?单片机初学者怎样看懂代码
2022-03-21
PHP 教程之如何使用BLOB存取图片信息实例
2014-09-05
零基础的初学者怎样学习java,或者应该先学什么?
2022-03-21
学ug编程如何快速入门?
2022-03-17
PHP数组函数array
2014-09-05
学习使用C语言/C++编程的7个步骤!超赞~
2022-03-20
球球大作战汉化版下载v19.7.1 安卓版
其它手游 170.54MB
下载
葫芦侠三楼最新破解版下载v4.4.0.6 安卓版
其它手游 34.82MB
下载
葫芦侠7楼破解版免费下载v4.4.0.6安卓最新版
其它手游 34.82MB
下载
葫芦侠八楼免费版下载v4.4.0.6安卓版
其它手游 34.82MB
下载
葫芦侠3楼破解版免费下载v4.4.0.6安卓手机版
其它手游 34.82MB
下载
像素漫斗抱歉,“八神庵”是特指游戏角色的专有名词,不存在符合要求的常用同义词近义词。下载v1.00安卓版
其它手游 206.87MB
下载
葫芦侠4楼破解版游戏修改器下载v4.4.0.6安卓免费版
其它手游 34.82MB
下载
末日餐厅安卓版下载v1.35安卓版
其它手游 73.98MB
下载葫芦侠十楼免费破解版下载v4.4.0.6安卓版
下载
葫芦侠8楼最新破解版下载v4.4.0.6安卓版
下载
猫娘乐园世界连结正版下载v1.9.1 安卓版
下载
像素漫斗全员下载v1.00安卓版
下载
葫芦侠8楼手机版下载v4.4.0.6安卓版
下载
末日餐厅正版官网入口下载v1.35安卓版
下载
我的汉克狗正版下载v26.4.1.48473 安卓版
下载
像素漫斗u鼬神最新版本下载v1.00安卓版
下载