单例模式 俗称单例3步曲+1曲
2018-06-22 04:57:59来源:未知 阅读 ()
什么是单例模式?
在整个应用中通过这个类只能实例化一个对象实例的设计模式
模式分类?
在所有模式设计中,有三种基础设计模式,单例模式,工厂模式,注册树模式,其他模式往往基于这几种模式,今天带来的是单例模式。
为什么要用单例模式?
1。php常常和数据库打交道,如果在应用中频繁建立连接对象,进行new操作的话,会消耗大量的系统内存资源。(节省资源开销)
2。在团队合作项目中,单例模式可以有效避免不同程序员new自己的对象时,造成人为的系统消耗。(节省资源开销)
------------------实现单例3部曲+1曲------------------
第一步:封装构造方法 private __construct( ) { }
原因: 构造函数在 new 出对象的时候第一个调用的方法 构造函数被申明为private或者protected这注定无法通过new的方法创建实例对象了。
第二步: 通过类内的方法来创建对象实例。 static Single(){ }
原因:我们往往往往是创建了对象后才调用对象的方法,而此时需要调用类里面的方法来创建对象。不受是否创建对象影响都能调用的方法的解决方案毋庸置疑那就是利用关键字--static
第三步:定义一个封装的静态变量 private static $instance
原因:把实例化的唯一对象放在这个变量里面存起来
第四步(加1曲):私有化克隆的魔术方法:__c l o n e ();
原因:对于一个类的对象,如果使用“clone运算符”,就会克隆出一个跟当前对象完全一样的新对象出来,并且:此时这个新对象还会自动调用该类中的魔术方法:_ _c l o n e ();只要其中有该方法;
代码演示
1 <?php 2 3 class Sing { 4 5 //第三步:定义一个变量 6 private static $instance= null; 7 8 //第一步:封装构造函数 9 private function __construct(){ 10 11 } 12 13 //第二步:使用类名调用这个类创建对象实例 14 static function getSingle(){ 15 if( !(self::$instance instanceof self) ){ //instanceof判断一个对象是否是某个类的实例 16 self::$instance = new self(); //用变量来存储实例化出来的对象 17 } 18 return self::$instance; 19 } 20 21 22 //第四步:禁止克隆实例化出来的对象 23 private function __clone(){ } 24 25 } 26 27 $danli = Sing::getSingle(); 28 var_dump($danli); //输出 object(Sing)#1 (0) { } 29 $danli2 = Sing::getSingle(); 30 var_dump($danli2); //输出 object(Sing)#1 (0) { } 31 32 $obj3 = clone $danli; //此处禁止克隆单例对象实例 33 var_dump($obj3); //Call to private Sing::__clone() from context '' in 错误行号 34 35 36 ?>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP设计模式之工厂模式详解 2020-02-19
- 分析php中注册器模式类用法实例 2019-12-02
- PHP的五种设计模式 2019-09-23
- PHP 设计模式之观察者模式介绍 2019-08-29
- 【多进程】php实现 master-worker 守护多进程模式 2019-07-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash