单例模式的特点:
    1、只能实例化一次
    单例模式的优点:
    1、保证数据唯一性
    2、节省内存空间

    1. <?php
    2. /*
    3. 单例设计模式 (单态)
    4. 定义: 一个类 只能允许有 一个对象存在.
    5. 1.不让进: 使类不能被实例化
    6. 2.留后门: 设置静态方法
    7. 3.给对象: 在静态方法里实例化该类
    8. 4.判初夜: 判断是否是 第一次产生该类的对象
    9. 5.设静态: 静态方法里 要使用静态属性
    10. */
    11. /*//1.不让进: 使类不能被实例化-----------------
    12. class Test
    13. {
    14. // 设置 一个封装的构造方法
    15. private function __construct()
    16. {
    17. //占位, 我就是不让你NEW我~~~
    18. }
    19. }*/
    20. /*//2.留后门: 设置静态方法--------------------
    21. class Test
    22. {
    23. // 设置 一个封装的构造方法
    24. private function __construct()
    25. {
    26. //占位, 我就是不让你NEW我~~~
    27. }
    28. //后门
    29. public static function getObject()
    30. {
    31. echo "啊,我是后门,进吧!<br>";
    32. }
    33. }*/
    34. /*//3.给对象: 在静态方法里实例化该类------------------
    35. class Test
    36. {
    37. // 设置 一个封装的构造方法
    38. private function __construct()
    39. {
    40. //占位, 我就是不让你NEW我~~~
    41. }
    42. //后门
    43. public static function getObject()
    44. {
    45. echo "啊,我是后门,进吧!<br>";
    46. return new self();//实例化一个对象给你
    47. }
    48. }*/
    49. /*//4.判初夜: 判断是否是 第一次产生该类的对象------------------
    50. class Test
    51. {
    52. private $obj = null;//属性值为对象,默认为null
    53. // 设置 一个封装的构造方法
    54. private function __construct()
    55. {
    56. //占位, 我就是不让你NEW我~~~
    57. }
    58. //后门
    59. public static function getObject()
    60. {
    61. echo "啊,我是后门,进吧!<br>";
    62. if ($this->obj === null) {
    63. $this->obj = new self();//实例化一个对象
    64. }
    65. //返回的属性 其实就是本对象
    66. return $this->obj;
    67. }
    68. }*/
    69. //5.设静态: 静态方法里 要使用静态属性------------------
    70. class Test
    71. {
    72. private static $obj = null;//属性值为对象,默认为null
    73. // 设置 一个封装的构造方法
    74. private function __construct()
    75. {
    76. //占位, 我就是不让你NEW我~~~
    77. }
    78. //后门
    79. public static function getObject()
    80. {
    81. echo "啊,我是后门,进吧!<br>";
    82. if (self::$obj === null) {
    83. self::$obj = new self();//实例化一个对象
    84. }
    85. //返回的属性 其实就是本对象
    86. return self::$obj;
    87. }
    88. }
    89. /*Test::getObject();//使用静态方法访问该类里的方法
    90. exit;*/
    91. $t1 = Test::getObject();
    92. $t2 = Test::getObject();
    93. //判断 两个对象 是否是同一个对象
    94. if ($t1 === $t2) {
    95. echo "哦, Yes! 是同一个实例<br>";
    96. } else {
    97. echo "哦, No! 不是同一个实例<br>";
    98. }