最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php设计模式实例之单例模式

    本文章来给大家介绍php设计模式实例之单例模式方法,有需要了解的朋友可进入参考参考.

    单例类:

    1.构造函数需要标记为private,单例类不能再其他类中实例化,只能被其自身实例化

    2.拥有一个保存类的实例静态成员变量

    3.拥有一个访问这个实例的公共的静态方法.[常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到此类是否已经被实例化]

    注:需要创建__clone()方法防治对象被复制

    作用:

    1.php的应用主要用于数据库,所以一个应用中会存在大量的数据库操作,使用单例模式,则可以避免大量new操作消耗的资源

    2.如果系统中需要一个类来全局控制某些配置信息,那么使用单例模式可以很方便的实现.参照ZF的FrontController部分

    3.在一个页面请求汇总,便于进行调试,因为所有的代码都集中在一个类中,我们可以在类中设置钩子,输出日志,从而避免到处var_dump,echo.

    php单例模式的例子.

    实例代码如下:

    1. <?php 
    2. /** 
    3.  * 单例模式 
    4. */ 
    5. class DanLi{ 
    6.     //静态成员变量 
    7.     private static $_instance
    8.     //私有的构造方法 
    9.     private function __construct(){ 
    10.     } 
    11.     //防止对象被克隆 
    12.     public function __clone(){ 
    13.         trigger_error('Clone is not allow!',E_USER_ERROR); 
    14.     } 
    15.     public static function getInstance(){ 
    16.         if(!(self::$_instance instanceof self)){ 
    17.             self::$_instance = new self; 
    18.         } 
    19.         return self::$_instance
    20.     } 
    21.     public function test(){ 
    22.         echo "ok"
    23.     } 
    24.    
    25. //错误:$danli = new DanLi(); $danli_clone = clone $danli; 
    26. //正确:$danli = DanLi::getInstance(); $danli->test(); 
    27. ?> 

    下面我们讨论下为什么要使用PHP单例模式?

    多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种"计划生育".   而PHP每次执行完页面都是会从内存中清理掉所有的资源. 因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了. 单单从这个方面来说, PHP的单例的确有点让各位失望. 但是单例仅仅只有这个功能和应用吗? 答案是否定的,我们一起来看看.

    1. php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时(废话), 如果使用单例模式, 则可以避免大量的new 操作消耗的资源.

    2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分.

    3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo.

    实例代码如下:

    1. <?php 
    2. /** 
    3. * 设计模式之单例模式 
    4. * $_instance必须声明为静态的私有变量 
    5. * 构造函数和析构函数必须声明为私有,防止外部程序new 
    6. * 类从而失去单例模式的意义 
    7. * getInstance()方法必须设置为公有的,必须调用此方法 
    8. * 以返回实例的一个引用 
    9. * ::操作符只能访问静态变量和静态函数 
    10. * new对象都会消耗内存 
    11. * 使用场景:最常用的地方是数据库连接.  
    12. * 使用单例模式生成一个对象后, 
    13. * 该对象可以被其它众多对象所使用.  
    14. */ 
    15. class Example 
    16. //保存例实例在此属性中 
    17. private static $_instance
    18. //构造函数声明为private,防止直接创建对象 
    19. private function __construct() 
    20. echo 'I am Construceted'
    21. //单例方法 
    22. public static function singleton() 
    23. if(!isset(self::$_instance)) 
    24. $c=__CLASS__
    25. self::$_instance=new $c
    26. return self::$_instance
    27. //阻止用户复制对象实例 
    28. public function __clone() 
    29. trigger_error('Clone is not allow' ,E_USER_ERROR); 
    30. function test() 
    31. echo("test"); 
    32. // 这个写法会出错,因为构造方法被声明为private 
    33. $test = new Example; 
    34. // 下面将得到Example类的单例对象 
    35. $test = Example::singleton(); 
    36. $test->test(); 
    37. // 复制对象将导致一个E_USER_ERROR. 
    38. $test_clone = clone $test
    39. ?> 
    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php设计模式实例之单例模式

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级