php单例模式没搞懂

class test
{
    private static $instance;
    private function __construct()
    {
        echo 2;
    }

    public static function getInstance()
    {
        if( !( self::$instance instanceof self ) )
        {
            echo 1;
            self::$instance =new self();
        }
        return self::$instance;
    }

    private function __clone()
    {
    }
}
test::getInstance();   //12     

self::$instance =new self() 这里实例存不进静态私有变量里面啊,怎么实现单例?还是我哪里写错了?

阅读 4.1k
7 个回答

其实吧,你的代码没问题啊。。。

class test
{
    private $props = [];
    private static $instance;
    private function __construct()
    {
        echo 2;
    }

    public static function getInstance()
    {
        if( !( self::$instance instanceof self ) )
        {
            echo 1;
            self::$instance =new self();
        }
        return self::$instance;
    }

    private function __clone()
    {
    }

    public function setProp($key, $val)
    {
        $this->props[$key] = $val;
    }

    public function getProp($key)
    {
        return $this->props[$key];
    }
}
$a = test::getInstance(); //12
$b = test::getInstance(); //没有输出

$a->setProp("name", "zhangsan");
echo $b->getProp("name");   //zhangsan

改成这样,不知道你能理解了不。。。

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
菜鸟教程里面的解释吧

楼主您的代码没有问题的,昨天看了不敢回答,点了关注,期待大牛解答,后面了解了下单例,其实你了解下php的运行过程你就知道单例的具体作用是什么了

单例没什么问题。不知道你的疑问在哪里?

原理很简单,就是创建一个实例的时候,如果这个实例之前没有创建过,就创建一个,如果已经创建过,就直接拿来使用。

单例模式就是你无论创建几次都是同一个对象
为什么要用单例?

保持单一性
推荐问题
宣传栏