什么是PHP中的Singleton

时间:2014-07-16 19:54:34

标签: php singleton

我试图理解单身是什么。到目前为止我发现的是单例模式让我只创建一个类的实例。

到目前为止没有问题但是在PHP中创建单例类时我不知道它是如何工作的!

看一下这个例子:

class Foo {
    static function instance() {
        static $inst = null;
        if ($inst === null) {
            $inst = new self;
        }
        return $inst;
    }

    static function google(){
        echo 'google';
    }
    private function __construct() { }
    private function __clone() { }
    private function __wakeup() { }
}

我尝试从这个类中创建2个实例:

$obj = Foo::google();
$obj2 = Foo::google();

echo $obj2;

你可以看到$ obj和$ obj2是2个不同的对象,但这个代码可以工作,不会抛出任何错误!我可能错了或混淆了单身人士的目的。我在这里和那里搜索了很多关于它的内容但似乎没有回答我的问题。

非常感谢提前

3 个答案:

答案 0 :(得分:1)

您没有在代码中返回对象,但您的语法表明您是。

$obj = Foo::instance();

将返回一个实例

$obj2 = Foo::instance();

然后会显示$obj$obj2是同一个实例

因此,要给它一些上下文,请从static函数中删除单词google。然后,你可以这样做:

$obj = Foo::instance();
// $obj is now an object and can call its methods
`$obj->google();

这不是演示Singletons的功能,而是演示面向对象编程的功能。但我不相信你知道你确实需要使用Singleton

答案 1 :(得分:0)

在这个例子中,你不使用单例来获取单例的实例,你必须调用foo::instance()它总是会返回相同的对象。

答案 2 :(得分:0)

稍微更新了您的代码,向您解释单例模式的工作原理。这个实际的实现将是您的数据库类,您不希望在单个执行流程中拥有多个数据库连接实例。

class Foo {
    static $inst = null;
    static function instance() {

        if ($inst === null) {
            $inst = new self;
        }
        return $inst;
    }

    static function google(){
        echo 'google';
    }
    private function __construct() { }
    private function __clone() { }
    private function __wakeup() { }
}

现在创建类的实例并使用var_dump比较它们的对象。

$obj = Foo::instance();
$obj1 = Foo::instance();

var_dump($obj === $obj1);             // bool(true)