https://www.cnblogs.com/shamohai/p/11158206.html

    1. <?php
    2. // 单例模式,保证一个类只有一个实例,并提供一个访问它的全局访问点。
    3. // 单例模式的编写遵循三私一公,
    4. // private: 私有类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法
    5. class Singleton
    6. {
    7. //创建静态私有的变量保存该类对象
    8. private static $instance;
    9. //防止使用new直接创建对象
    10. private function __construct(){}
    11. //防止使用clone克隆对象
    12. private function __clone(){}
    13. // 共用方法:获取对象或者进行实例化
    14. public static function getInstance()
    15. {
    16. //判断$instance是否是Singleton的对象,不是则创建
    17. if (!self::$instance instanceof self) {
    18. self::$instance = new self();
    19. }
    20. return self::$instance;
    21. }
    22. public function test()
    23. {
    24. echo "我是一个单例模式";
    25. }
    26. }
    27. $sing = Singleton::getInstance();
    28. $sing->test();
    29. $sing1 = Singleton::getInstance();
    30. var_dump($sing === $sing1); // bool(true)
    31. $sing2 = new Singleton(); //Fatal error: Uncaught Error: Call to private Singleton::__construct() from invalid context in
    32. $sing3 = clone $sing; //Fatal error: Uncaught Error: Call to private Singleton::__clone() from context


    单例模式和使用静态变量实现单例的区别:
    静态变量再一次运行中,只会被初始化一次,所以我们可以使用静态变量保存对象,变相实现单例模式。

    单例模式强制类只能创建一个对象,而静态变量实现单例主要是为了减少new操作,并不能阻止new和clone操作。