关于php面向对象的复习(2)--单例模…
2013-12-24 22:52
106 查看
首先看这个用了单例模式的类
class SingleInstanceClass {
privatestatic $_instance;
var $name;
privatefunction __construct()
{
}
publicstatic function instance()
{
if (self::$_instance == NULL)
self::$_instance = new SingleInstanceClass();
return self::$_instance;
}
public function test(){
echo$this->name;
}
}
$s = SingleInstanceClass::instance();
$s->name = 'panda';
$s->test();
echo "<br/>";
$c = SingleInstanceClass::instance();
$c->name = '111';
$c->test();
echo "<br/>";
$s->test();
注:这段代码调用了3次test 结果为panda 111 111
问题来了 有些人会说为什么不是panda 111panda呢这就是单例模式的特别之处此终只有一个实例生成
先来说说什么是单例模式:
构造函数是私有的(private),也就是说这个类不能在外部被实例化
而只有通过静态方法instance()才能获取到这个类的实例。
而在instance()中通过判$_instance是否为空来确定是否实例化SingleInstanceClass类,同时也保障了SingleInstanceClass永远只有一个实例
在上面这个例子中:↑
$s 首先获得这个实例 然后给成员变量name赋值 输出 panda
然后$c 把这个实例拿过来了 为什么说拿过来了 而不是又生成一个实例
因为再一次调用instance();方法时,会判断$_instance是否为空($_instance会在内存中驻留一段时间),不为空,则返回最初初始化的实例
*注:静态变量的赋值操作只会在变量第一次初始化时会被调用,在之后函数的执行过程中,这个操作不会被调用
所以由此至终都是$s = SingleInstanceClass::instance(); 这个操作初始化的对象
上例中$c获得这个实例 又给实例重新赋值 然后输出 111
而由于$c和$s获得的是同一个实例 所以最下面的 $s->test(); 输出也是 111
class SingleInstanceClass {
privatestatic $_instance;
var $name;
privatefunction __construct()
{
}
publicstatic function instance()
{
if (self::$_instance == NULL)
self::$_instance = new SingleInstanceClass();
return self::$_instance;
}
public function test(){
echo$this->name;
}
}
$s = SingleInstanceClass::instance();
$s->name = 'panda';
$s->test();
echo "<br/>";
$c = SingleInstanceClass::instance();
$c->name = '111';
$c->test();
echo "<br/>";
$s->test();
注:这段代码调用了3次test 结果为panda 111 111
问题来了 有些人会说为什么不是panda 111panda呢这就是单例模式的特别之处此终只有一个实例生成
先来说说什么是单例模式:
构造函数是私有的(private),也就是说这个类不能在外部被实例化
而只有通过静态方法instance()才能获取到这个类的实例。
而在instance()中通过判$_instance是否为空来确定是否实例化SingleInstanceClass类,同时也保障了SingleInstanceClass永远只有一个实例
在上面这个例子中:↑
$s 首先获得这个实例 然后给成员变量name赋值 输出 panda
然后$c 把这个实例拿过来了 为什么说拿过来了 而不是又生成一个实例
因为再一次调用instance();方法时,会判断$_instance是否为空($_instance会在内存中驻留一段时间),不为空,则返回最初初始化的实例
*注:静态变量的赋值操作只会在变量第一次初始化时会被调用,在之后函数的执行过程中,这个操作不会被调用
所以由此至终都是$s = SingleInstanceClass::instance(); 这个操作初始化的对象
上例中$c获得这个实例 又给实例重新赋值 然后输出 111
而由于$c和$s获得的是同一个实例 所以最下面的 $s->test(); 输出也是 111
相关文章推荐
- php面向对象之-延迟绑定复习-132
- PHP面向对象之魔术方法复习
- 关于php面向对象的一个坑爹的地方
- 关于php面向对象继承方面的几点总结
- 关于PHP数组复习的一点心得
- 本周笔记整理(关于php面向对象的一些基层知识点)
- 关于php,为什么要使用面向对象进行项目开发
- PHP面向对象3-引用&
- 分享关于php CI框架使用的一点小总结
- php 面向对象
- 关于php密码md5加密措施
- php深入学习三——面向对象以及函数重载
- PHP开发中关于文件操作的疑难问答
- 关于 PHP 枚举数组
- PHP中的面向对象OOP中的魔术方法
- PHP学习笔记之PHP面向对象(八)
- 【php】php中关于$_SERVER的理解
- 关于PHP爬虫和Android定位的初步设想
- php关于return的关键字
- 关于数据库连接的一些基础复习