Maison  >  Article  >  développement back-end  >  学习php设计模式之单例模式

学习php设计模式之单例模式

WBOY
WBOYoriginal
2016-07-25 09:05:17773parcourir
  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. ?>
复制代码


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn