克隆对象可以在单例模式中具有相同的范围吗?
Can clone object have same scope in singleton pattern?
就我而言,我在下面创建了一个单例对象检查-
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
为什么会有不同的范围呢?如果克隆然后共享相同的范围,如何只创建一个对象?
请阅读本文,也许您会发现另一种设计模式更适合您的情况。这篇文章对我帮助很大
Then $obj and $obj1 have difference scope why?
因为绝对没有理由让他们共享同一个 "scope",如果你的意思是同一个实例的话。您使用您所做的方法实现了该单例,但这对 PHP 的其余行为没有影响。克隆构造不使用您的 create_obj()
方法,因此它不会是单例。
And how to create only one object if clone then share same scope?
不使用克隆。如果你希望你的 class 成为使用此方法的单例,你需要始终使用你的单例创建方法。
仅凭这一点很难判断,但您的目标似乎自相矛盾。如果您需要一个对象的两个不同实例但表示相同的实例,只需使用该对象的相同实例。几乎没有区别。
如果您需要在整个脚本执行过程中使用一个对象的单个实例,则不需要单例,只需将其实例化一次,然后将其传递给需要它的每个其他对象。在 PHP 中对象以类似引用的方式传递,这意味着如果将它传递给不同的函数,所有函数将作用于同一个实例。
就我而言,我在下面创建了一个单例对象检查-
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
为什么会有不同的范围呢?如果克隆然后共享相同的范围,如何只创建一个对象?
请阅读本文,也许您会发现另一种设计模式更适合您的情况。这篇文章对我帮助很大
Then $obj and $obj1 have difference scope why?
因为绝对没有理由让他们共享同一个 "scope",如果你的意思是同一个实例的话。您使用您所做的方法实现了该单例,但这对 PHP 的其余行为没有影响。克隆构造不使用您的 create_obj()
方法,因此它不会是单例。
And how to create only one object if clone then share same scope?
不使用克隆。如果你希望你的 class 成为使用此方法的单例,你需要始终使用你的单例创建方法。
仅凭这一点很难判断,但您的目标似乎自相矛盾。如果您需要一个对象的两个不同实例但表示相同的实例,只需使用该对象的相同实例。几乎没有区别。
如果您需要在整个脚本执行过程中使用一个对象的单个实例,则不需要单例,只需将其实例化一次,然后将其传递给需要它的每个其他对象。在 PHP 中对象以类似引用的方式传递,这意味着如果将它传递给不同的函数,所有函数将作用于同一个实例。