我试图理解单身是什么。到目前为止我发现的是单例模式让我只创建一个类的实例。
到目前为止没有问题但是在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个不同的对象,但这个代码可以工作,不会抛出任何错误!我可能错了或混淆了单身人士的目的。我在这里和那里搜索了很多关于它的内容但似乎没有回答我的问题。
非常感谢提前
答案 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)