首頁 >後端開發 >php教程 >學習php設計模式之單例模式

學習php設計模式之單例模式

WBOY
WBOY原創
2016-07-25 09:05:17796瀏覽
  1. /**

  2. * php设计模式之单例模式
  3. * $_instance必须声明为静态的私有变量
  4. * 构造函数和析构函数必须声明为私有,防止外部程序new
  5. * 类从而失去单例模式的意义
  6. * getInstance()方法必须设置为公有的,必须调用此方法
  7. * 以返回实例的一个引用
  8. * ::操作符只能访问静态变量和静态函数
  9. * new对象都会消耗内存
  10. * 使用场景:最常用的地方是数据库连接。
  11. * 使用单例模式生成一个对象后,
  12. * 该对象可以被其它众多对象所使用。
  13. * @link http://bbs.it-home.org
  14. */

  15. class Danli {

  16. //保存类实例的静态成员变量
  17. private static $_instance;
  18. //private标记的构造方法
  19. private function __construct(){
  20. echo 'This is a Constructed method;';
  21. }
  22. //创建__clone方法防止对象被复制克隆
  23. public function __clone(){
  24. trigger_error('Clone is not allow!',E_USER_ERROR);
  25. }

  26. //单例方法,用于访问实例的公共的静态方法

  27. public static function getInstance(){
  28. if(!(self::$_instance instanceof self)){
  29. self::$_instance = new self;
  30. }

  31. return self::$_instance;

  32. }

  33. public function test(){

  34. echo '调用方法成功';
  35. }
  36. }

  37. //用new实例化private标记构造函数的类会报错

  38. //$danli = new Danli();
  39. //正确方法,用双冒号::操作符访问静态方法获取实例
  40. $danli = Danli::getInstance();
  41. $danli->test();
  42. //复制(克隆)对象将导致一个E_USER_ERROR
  43. $danli_clone = clone $danli;
  44. ?>

复制代码


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn