50)PHP,单例模式
2024-10-08 17:18:19
class B{
public $v1 = ; private static $instance; private function __construct(){}
public static function getNew(){
//如果本类中的$instance还没有数据
if( !isset(B::$instance) ){
B::$instance = new self;
}
return B::$instance;
}
private function __clone(){}
}
//$o1 = new B();//出错,因为构造方法私有了,
$o1 = B::getNew();
$o1->v1 = ; //修改
$o2 = B::getNew();
var_dump($o1);
echo "<br />";
var_dump($o2);
$o3 = clone $o1; //克隆对象
echo "<br />";
var_dump($o3);
$o1->v1 = ;
echo "<br />o1中的v1为:" . $o1->v1;
echo "<br />o2中的v1为:" . $o2->v1;
echo "<br />o3中的v1为:" . $o3->v1;
然后结果截图:
但是,有一个问题,虽然单例模式可以让类只是实例化一次,但是每一个类都有一个魔法函数clone,那么就可以创建的新的类,所以,我们要防止用clone创建新的类,就有了在我们的单例模式类里面给那个clone函数变成私有的,这样,我们在这类的外面就不能用clone函数了,代码如下:
class B{
public $v1 = ; private static $instance; private function __construct(){}
public static function getNew(){
//如果本类中的$instance还没有数据
if( !isset(B::$instance) ){
B::$instance = new self;
}
return B::$instance;
}
//下面的这个private就是将clone变成私有的,在类的外面就不能用clone克隆了。
private function __clone(){}
}
最新文章
- android:configChanges=";keyboard|keyboardHidden|orientation|screenSize";
- Yii2 yii2-imagine的使用
- 看2015年TFC游戏大会,云计算何以唱主角
- 通过IIS不能连接远程数据库的问题
- Serv-U软件在64位操作系统下使用不了odbc解决方法
- Ext.MessageBox的用法
- 在 iOS 应用中直接跳转到 AppStore 的方法--备用
- 计算两点间的距离-hdu2001
- 采用max_dump_file_size 参数限制trc文件大小
- Java入门——(8)网络编程
- 关系型数据库工作原理-事务管理(二)(翻译自Coding-Geek文章)
- C#中获取文件信息的代码
- 为Oracle GoldenGate准备数据库
- 详解Linux安装GCC
- Jmeter测试报告
- unittest和pytest的区别
- Zookpeer集群节点
- mycat 单库分表
- Remove Duplicates from Sorted Array II leetcode java
- 【VUE】@click加上v-bind绑定切换类名及动画事件
热门文章
- python *args 和 ** kwargs
- SpringCloud学习之Feign 的使用(五)
- Maven:A cycle was detected in the build path of project &#39;xxx&#39;. The cycle consists of projects {xx}
- Adobe PhotoShop CS6中文破解版下载
- 理解String的intern()方法
- CentOS 7.3 下部署基于 Node.js的微信小程序商城
- mysql5.7.21源码安装
- Jackknife,Bootstrap, Bagging, Boosting, AdaBoost, RandomForest 和 Gradient Boosting的区别
- getComputedStyle() 和 getPropertyValue()
- JavaWeb开发中遇到问题汇总