Возможный дубликат:
В классе 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.
Каковы преимущества и недостатки использования частного конструктора?
Синглтоны действительно так плохо?
Что так плохо о одиночных играх?
Существует несколько сценариев, в которых вы можете сделать свой конструктор частным. Общей причиной является то, что в некоторых случаях вы не хотите, чтобы внешний код вызывал ваш конструктор напрямую, но заставлял его использовать другой метод для получения экземпляра вашего класса.
Вам всегда нужен только один экземпляр вашего класса:
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); } }
Частный конструктор используется в двух условиях
getInstance()
При использовании заводской функции для генерации объектов В этом случае будет несколько объектов, но объект будет создан статической функцией, например
$ 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; }