Может ли объект-клон иметь одинаковую область действия в шаблоне синглтона? - PullRequest
0 голосов
/ 31 мая 2018

В моем случае я создал проверку одиночного объекта ниже -

  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 имеют разный охват, почему?А как создать только один объект, если клонировать то же самое?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Тогда $ obj и $ obj1 имеют разную область видимости, почему?

Потому что у них нет абсолютно никакой причины делить одну и ту же "область видимости", если под этим вы подразумеваете быть одинаковымипример.Вы реализовали этот синглтон, используя метод, который вы сделали, но это не влияет на остальную часть поведения PHP.Конструкция клона не использует ваш метод create_obj(), поэтому он не будет синглтоном.

А как создать только один объект, если клон затем использует одну и ту же область видимости?

Не используя клон.Если вы хотите, чтобы ваш класс был одноэлементным с помощью этого метода, вам нужно всегда использовать ваш метод создания одноэлементных файлов.


Сложно сказать, но у вас здесь противоречивые цели,Если вам нужны два разных экземпляра объекта, но представляющих один и тот же экземпляр, просто использует один и тот же экземпляр объекта .Разницы практически нет.

Если вам нужен один экземпляр объекта, который будет использоваться на протяжении всего выполнения скрипта, нет необходимости в синглтоне, просто создайте его экземпляр один раз, а затем передайте его каждому другому нужному объектуЭто.Объекты передаются в PHP как ссылки, что означает, что если вы передадите их разным функциям, все функции будут работать в одном экземпляре.

0 голосов
/ 31 мая 2018

Пожалуйста, прочитайте это, может быть, вы найдете другой шаблон дизайна, который очень удобен для вашего случая.Эта статья мне очень помогает

https://github.com/kamranahmedse/design-patterns-for-humans

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...