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

    1. 未被改变成员属性前,变量1age:22
    2. 被改变成员属性前,变量1age:24
    3. 被改变成员属性前,变量2age:24
    1. 也就是无法被外部克隆对象,如上代码,通过变量重新实例化对象的方式,都将是共用同一实例,这就是单例模式。

    应用场景

    1. 数据库连接