Intereting Posts
Yii2 требовал проверки при обновлении генерировать 10 цифр буквенно-цифровое значение в php с первой, третьей, четвертой цифрой должно быть алфавитом Несколько маршрутов с тем же анонимным обратным вызовом с использованием Slim Framework Каков наилучший способ отображения «флеш-сообщений» в kohana v3? Как я могу получить URL-адрес отправителя на моем сервере в php Производительность источника событий Прикрепление значения текстового поля к ссылке в виде переменной без использования кнопки отправки mysqli_affected_rows в вставке PHP URL-адрес перенаправления API-интерфейса API-интерфейса Google Analytics Эффективная ротация баннера с помощью PHP Как я могу создать определенное количество случайных значений, равное всем указанному числу в PHP? Передача двух разных форм с внешней кнопкой отправки не работает должным образом Как выполнять PHP-код периодически в автоматическом режиме Как сделать онлайн / оффлайн Заменить значение конкретного узла в xml, используя php

Когда мы должны сделать конструктор Private & Why? PHP

Возможный дубликат:
В классе PHP5, когда вызывает вызов частного конструктора?

Недавно я читал об ООП и наткнулся на этот сценарий частного конструктора. Я выполнил поиск Google, но не смог найти что-либо относящееся к PHP.

В PHP

  • Когда мы должны определить частный конструктор?
  • Какова цель использования частного конструктора?
  • Каковы преимущества и недостатки использования частного конструктора?

Когда мы должны определить частный конструктор?

class smt { private static $instance; private function __construct() { } public static function get_instance() { { if (! self::$instance) self::$instance = new smt(); return self::$instance; } } } 

Какова цель использования частного конструктора?

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

Каковы преимущества и недостатки использования частного конструктора?

  • Синглтоны действительно так плохо?

  • Что так плохо о одиночных играх?

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

Шаблон Singleton

Вам всегда нужен только один экземпляр вашего класса:

 class Singleton { private static $instance = null; private function __construct() { } public static function getInstance() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } } 

Заводской метод

Вы хотите предоставить несколько методов для создания экземпляра вашего класса и / или вы хотите контролировать способ создания ваших экземпляров, поскольку для правильного его вызова необходимы некоторые внутренние знания конструктора:

 class Decimal { private function __construct($value, $scale = 0) { // ... } public static function zero() { return new self('0'); } public static function fromString($string) { // Perform sanity checks on the string, and compute the value & scale // ... return new self($value, $scale); } } 

Частный конструктор используется в двух условиях

  1. При использовании шаблона Singleton В этом случае существует только один объект, и объект будет создан обычно с помощью функции getInstance()
  2. При использовании заводской функции для генерации объектов В этом случае будет несколько объектов, но объект будет создан статической функцией, например

    $ token = Token :: generate ();

Это создаст новый объект Token.

Частный конструктор используется в основном в шаблоне Singleton , в котором вы не хотите, чтобы ваш класс был создан напрямую, но вы хотите получить к нему доступ с помощью метода getInstance() .

Таким образом, вы уверены, что никто не может вызвать __construct() вне самого класса.

Частные конструкторы здесь, чтобы реализовать одиночный шаблон большую часть времени или если вы хотите заставить завод. Этот шаблон полезен, если вы хотите быть уверенным, что у вас есть только один экземпляр объекта. он реализуется следующим образом:

 class SingletonClass{ private static $instance=null; private function __construct(){} public static function getInstance(){ if(self::$instance === null){ self::$instance = new self; } return self::$instance; }