В моем случае я создал проверку одноэлементного объекта ниже:
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
есть различие области применения, почему? А как создать только один объект, если клонировать то же самое?
Тогда $ obj и $ obj1 имеют разную область видимости, почему?
Потому что у них нет абсолютно никакой причины делить одну и ту же «область видимости», если под этим вы подразумеваете один и тот же экземпляр. Вы реализовали этот синглтон, используя метод, который вы сделали, но это не влияет на остальную часть поведения PHP. Конструкция клона не использует ваш create_obj()
метод, поэтому он не будет синглтоном.
А как создать только один объект, если клонировать то же самое?
Не используя клон. Если вы хотите, чтобы ваш класс был одноэлементным с этим методом, вам нужно всегда использовать ваш метод создания одноэлементного класса.
Об этом трудно судить, но, похоже, у вас здесь противоречивые цели. Если вам нужны два разных экземпляра объекта, но представляющих один и тот же экземпляр, просто используйте тот же экземпляр объекта. Там практически нет разницы.
Если вам нужен один экземпляр объекта, который будет использоваться на протяжении всего выполнения скрипта, нет необходимости в синглтоне, просто создайте его экземпляр один раз, а затем передайте его каждому другому объекту, который в этом нуждается. Объекты передаются в PHP как ссылки, что означает, что если вы передадите их разным функциям, все функции будут работать с одним экземпляром.
Пожалуйста, прочитайте это, может быть, вы найдете другой шаблон дизайна, который очень удобен для вашего случая. Эта статья мне очень помогает