欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php设计模式之单例模式使用示例_PHP

程序员文章站 2023-12-26 16:06:45
...
以下为单例模式代码:

复制代码 代码如下:
class EasyFramework_Easy_Mysql{
protected static $_instance = null;
private function __construct(){

}
public static function getInstance(){
if (self::$_instance === null){
self::$_instance = new self();
}
return self::$_instance;
}

protected function __clone(){

}

}

$x = EasyFramework_Easy_Mysql::getInstance();

var_dump($x);


?>


/*
* 1.第一步:
* 既然是单例,也就是只能实例化一次,也就代表在实例化时
* 不可能使用new关键字!!!!
* 在使用new关键字时,类中的构造函数将自动调用。
* 但是,如果我们将构造函数的访问控制符设置为protected或private
* 那么就不可能直接使用new关键字了!!!
* 第二步:
* 无论protected/private修饰的属性或方法,请问在当前类的
* 内部是否可以访问?---> 可以
* 第三步:
* 现在我们根本没有办法得到对象(因为你不能使用new关键字了),
* 第四步:静态成员(包括属性或方法)在访问时,只能通过
* 类名称::属性()
* 类名称::方法()
* 第五步:如果我现在存在一个静态方法--> getInstance()
* 那么在调用时就应写成
* $object = EasyFramework_Easy_Mysql::getInstance()
* 如果,getInstance()方法可以得到唯一的一个对象
* 也就代表是所谓的单例模式了!!!
* 第六步,怎么让getInstace()只得到一个对象呢?
* 既然要得到对象,那么肯定是:
* $variabl = new ????();
* 我们又知道静态属性的值是可以所有的对象来继承的!!!
* 静态成员是属于类的,而非对象的!
* 所以:
* 第七步:声明一个静态的属性,用其存储实例化的对象
* protectd static $_instance
*
* 并且初始值为null
* 那么我在调用getInstance()方法时,只需要判断其值是否为空即可\
*
* public static function getInstance(){
* if(self::_instance === null){
* self::_instance = new self();
* }
* return self::_instance;
* }
* 在实例时,一定是这样写:
* $x = EasyFramework_Easy_Mysql::getInstance();
* 在第一时调用时,类的$_instance这个静态属性值为null,
* 那么也就代表,getInstance()方法的判断条件为真了,
* 也就意味着
* self::$_instance这个成员有了值了!!!
* 并且还返回这个值
* $y = EasyFramework_Easy_Mysql::getInstance();
* 在第二次或第N次调用时,self::$_instance已经有了值了
* 也就代表getInstance()方法的条件为假了!!!
* 也就代表其中的程序代表不可能执行了!!!
* 也就代表将直接返回以前的值了!!!
*
*
*
* */

上一篇:

下一篇: