Когда мы должны сделать конструктор Private & Why? PHP - программирование
Подтвердить что ты не робот

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

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

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

В PHP

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

Ответ 1

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

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

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

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

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

Ответ 2

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

Шаблон 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;
    }
}

Factory метод

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

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);
    }
}

Ответ 3

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

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

Ответ 4

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

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

    $token = Token:: generate();

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

Ответ 5

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

class SingletonClass{
    private static $instance=null;
    private function __construct(){}

    public static function getInstance(){
        if(self::$instance === null){
            self::$instance = new self; 

        }
        return self::$instance;
}