1. <?php
  2. /**
  3. * 设计模式之单例模式
  4. * 应用场景:数据库链接操作,对象操作是唯一操作的时候
  5. * 小黄牛
  6. */
  7. header("Content-type: text/html; charset=utf-8");
  8. /**
  9. * 单例
  10. */
  11. class SingLeton{
  12. public $age; // 测试成员
  13. private static $instance = null; // 创建静态对象变量,用于存储唯一的对象实例
  14. private function __construct(){} // 私有化构造函数,防止外部调用
  15. private function __clone(){} // 私有化克隆函数,防止外部克隆对象
  16. /**
  17. * 实例化对象方法,供外部获得唯一的对象
  18. */
  19. public static function getInstance(){
  20. # 只有第一次调用,才允许创建对象实例
  21. if (empty(self::$instance)) {
  22. self::$instance = new SingLeton();
  23. }
  24. return self::$instance;
  25. }
  26. }
  27. $single1 = SingLeton::getInstance();
  28. $single1->age=22;
  29. echo "未被改变成员属性前,变量1的age:{$single1->age}<br/>";
  30. $single2 = SingLeton::getInstance();
  31. $single2->age=24;
  32. echo "被改变成员属性前,变量1的age:{$single1->age}<br/>";
  33. echo "被改变成员属性前,变量2的age:{$single2->age}<br/>";

浏览器输出

  1. 未被改变成员属性前,变量1age:22
  2. 被改变成员属性前,变量1age:24
  3. 被改变成员属性前,变量2age:24

代理模式

  1. 也就是无法被外部克隆对象,如上代码,通过变量重新实例化对象的方式,都将是共用同一实例,这就是单例模式。

应用场景

  1. 数据库连接