就我而言,我在下面创建了一个单例对象检查 -
class Foo {
private static $obj = null;
public static function create_obj () {
if (self::$obj === null) {
self::$obj = new self;
}
return self::$obj;
}
}
然后在
下创建对象检查$obj = Foo::create_obj();
然后克隆$ obj然后
$obj1 = clone $obj;
那么$obj
和$obj1
的范围有何不同?如果克隆然后共享相同的范围,如何只创建一个对象?
答案 0 :(得分:0)
请阅读此内容,也许您会发现另一种设计模式,非常适合您的情况。这篇文章对我有很大帮助
答案 1 :(得分:0)
然后$ obj和$ obj1有不同的范围原因?
因为他们绝对没有理由共享相同的“范围”,如果你的意思是同一个实例。您使用您所使用的方法实现了该单例,但这对PHP的其余行为没有影响。克隆构造不使用您的create_obj()
方法,因此它不会是单例。
如果克隆然后共享相同的范围,如何只创建一个对象?
不使用克隆。如果您希望您的类成为使用此方法的单例,则需要始终使用单例创建方法。
这很难说清楚,但似乎你在这里有相互矛盾的目标。如果您需要两个不同的对象实例但表示同一个实例,只需使用对象的相同实例。几乎没有区别。
如果您需要在整个脚本执行过程中使用对象的单个实例,则不需要单例,只需将其实例化一次,然后将其传递给需要它的每个其他对象。对象在PHP中以类似引用的方式传递,这意味着如果将它传递给不同的函数,则所有函数都将作用于同一个实例。