PHP单例模式--典型的三私一公
单例模式:即一个类只被实例化一次,当其他人对其再次实例化时,便返回第一次实例化的对象。这种模式可以极大地节约资源。典型应用于数据库类的实例化。
以实例化一个Mysql数据库类为例:
要实现一个类只实例化一次,就必须堵住其他实例化的入口。
1.实例化类时,会自动调用类的构造方法,因为将构造方法设置为private属性,限制为只能在类内部实例化
private function __construct(){
}
2.定义一个静态方法,在类内部实例化对象。实例化前先判断该类是否已被实例化了,若已被实例化,就返回该实例化对象;若没被实例化,便实例化一个对象并将该对象保存在类的静态属性中
private static $self = null;
public static function create(){
if (self::$self === null) {
self::$self = new self();
}
return self::$self;
}
3.禁止克隆,对象之间进行克隆可生成不同的对象。而克隆时会自动调用类的__conle方法,因此将克隆方法设置为private属性
private function __clone(){
}
综上,三私一公(三个私有属性和一个公共方法)单例模式的代码如下:
class Mysql {
private static $self = null;
public static function create(){
if (self::$self === null) {
self::$self = new self();
}
return self::$self;
}
private function __construct(){
}
private function __clone(){
}
}
$a = Mysql::create();
$b = Mysql::create();
/*判断两个类是否为同一个类*/
echo $a===$b ? 1 : 0;
PHP单例模式--典型的三私一公的更多相关文章
- C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...
- RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例
前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密 私加 ===================== ...
- 设计模式之单例模式Singleton(三创建型)
1.什么事单例模式? 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须 ...
- PHP封装的一个单例模式Mysql操作类
掌握满足单例模式的必要条件----三私一公. ①私有的构造方法-为了防止在类外使用new关键字实例化对象. ②私有的成员属性-为了防止在类外引入这个存放对象的属性. ③私有的克隆方法-为了防止在类外通 ...
- PHP中设计模式以及魔术方法
1.设计模式 1.1单例模式 口诀:三私一公 1.私有的静态属性用来保存对象的单例 2.私有的构造方法用来阻止在类的外部实例化 3.私有的__clone阻止在类的外部clo ...
- php模式的设计
工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式. 工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,虽然工厂方法可以任意命名这个静态 ...
- single单例模式
单例模式:多用于数据库连接,保证数据库只连接一次,避免重复连接.因为多次打开服务器会造成服务器负担,运行速度会减慢. 以下是一个连接数据库的单例模式: <?php class db_mysql{ ...
- PHP中的单例模式
额,只是复习到这里,做点笔记吧. 单例模式.何谓也?我想就是唯一吧.唯一的意思大概希特勒已经说的很清楚了.就是我也说不明白--把代码贴上来了事. <?php // Single instance ...
- php -- 设计模式 之 单例模式
实现单例的条件:三私一公 三私:私有化构造方法:不让外部创建对象 私有化克隆方法:不让外部克隆对象 私有静态属性:保存已经产生的对象 一公:公共静态方法:在类内部创建对象 实例: <?php / ...
随机推荐
- python tornado nginx deployment tornado 的部署在linux Nginx服务器
题外话: 这里分享一个链接是将Flask 和 Apache 用 mod_wsgi 来进行传唤的部署方式,在digital ocean VPS 上的. https://www.digitalocean. ...
- 精通CSS+DIV基础总结(三)
Div+CSS可是实现简单的网页设计,对于需要添加动作,更方便的交互,Javascript给我们提供了方便:数据的存储可以利用XML使其更加方便:而对于减少页面与服务器的交互,可以利用Ajax技术,与 ...
- hdu 1809 求SG函数
A New Tetris Game(2) Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Jquery控制点击时一、二级菜单自由隐藏与出现
一.基本HTML和CSS HTML中产生一.二级导航的代码: {loop $nav $key $value} <div class=”u_con”> <span class=” xg ...
- lll
//// whywhy unsigned int T = 1; ~T = 4294967294; T = 2;~T= 4294967293 ;T = 0;~T=4294967295; int T = ...
- js动画(二)
嗯,今天好冷,特别冷,我的手指,都冻的打不了字了.今天一件特别的傻的事就是,在 for(var i;i<obj.length;i++){} 找了半天没有注意到 var i 没有赋值.够150 了 ...
- response.addCookie(cookie)添加cookie失败.
两个if循环能进来,创建的两个cookie也能通过控制台输出. 但是却添加失败. 原因是:request.getRequestDispatcher("/MainFrame").f ...
- centos下安装Jenkins轻松搞定
jenkins安装步骤如下: 命令:yum -y list java* yum -y install java-1.7.0-openjdk.x86_64 ...
- 关于mysql 5.6.24 的my.ini配置问题
- Hololens Rest API
通过Hololens提供的 Rest API 可以对Hololens进行远程控制和获取信息 ,可以通过第三方程序对Hololens重启或者关机,当然,还有更多更丰富的API,例如可以在PC上分流显示H ...