单例模式
2016-06-21 10:39
501 查看
浅谈单例模式
参考百度经验
单例模式顾名思义,就是对于指定的类只有一个实例,这样可以节省系统资源,也省去过多的实例化导致对象版本太多,不易管理。
1。首先需要保证该类不可以通过new来实例化。因为如果可以这样,那么就无法保证单例了。只需要把构造方法设置为private或者protected即可。
2。既然外部无法访问构造方法,那么也就无法实例化,就保证只能内部实例化,返回对象,那么就需要一个静态方法来,实例化该类本身并且返回该对象。
3.那么多次访问静态方法,不是也会创建不同的对象吗?这时候我们就需要一个静态属性来记录,如果该类已经被实例化过,就直接返回对象即可。
4.然后需要用final关键字防止该静态方法被继承,用__clone魔术方法防止该对象被克隆即可。
参考百度经验
单例模式顾名思义,就是对于指定的类只有一个实例,这样可以节省系统资源,也省去过多的实例化导致对象版本太多,不易管理。
1。首先需要保证该类不可以通过new来实例化。因为如果可以这样,那么就无法保证单例了。只需要把构造方法设置为private或者protected即可。
2。既然外部无法访问构造方法,那么也就无法实例化,就保证只能内部实例化,返回对象,那么就需要一个静态方法来,实例化该类本身并且返回该对象。
3.那么多次访问静态方法,不是也会创建不同的对象吗?这时候我们就需要一个静态属性来记录,如果该类已经被实例化过,就直接返回对象即可。
4.然后需要用final关键字防止该静态方法被继承,用__clone魔术方法防止该对象被克隆即可。
<?php class single{ static public $object = null; protected function __construct(){ } final static function NewOb(){ if (self::$object instanceof self) { return self::$object; } self::$object = new self(); return self::$object; } public function __clone(){ echo "想克隆没门<br />"; } } $t1 = single::NewOb(); $t2 = single::NewOb(); $t3 = clone $t2; if ($t1 === $t2) { echo '是一个对象<br />'; }else { echo '不是一个对象<br />'; } if ($t3 === $t2) { echo '是一个对象<br />'; }else { echo '不是一个对象<br />'; } ?>
相关文章推荐
- 一个关于if else容易迷惑的问题
- Python动态类型的学习---引用的理解
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- php7 读取php.ini[4]
- 土人系列AS入门教程 -- 对象篇
- 交换机升级排障实例
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充