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

Допустим, я пишу класс PHP (> = 5.0), который должен быть одноэлементным. Все документы, которые я прочитал, говорят о том, что конструктор класса должен быть закрытым, поэтому класс не может быть напрямую создан.

Так что, если у меня есть что-то вроде этого:

class SillyDB
{
  private function __construct()
  {

  }

  public static function getConnection()
  {

  }
}

Есть ли случаи, когда __construct () вызывается иначе, чем если бы я делал

new SillyDB() 

позвонить в сам класс?

И почему мне вообще разрешено создавать экземпляры SillyDB изнутри себя?

25.08.2008 14:11:10
1 ОТВЕТ
РЕШЕНИЕ

__construct()будет вызван только если вы вызываете его из метода для класса, содержащего приватный конструктор. Так что для вашего синглтона у вас может быть такой метод:

class DBConnection
{
   private static $Connection = null;

   public static function getConnection()
   {
      if(!isset(self::$Connection))
      {
         self::$Connection = new DBConnection();
      }
      return self::$Connection;
   }

   private function __construct()
   {

   }
}

$dbConnection = DBConnection::getConnection();

Причина, по которой вы можете / захотите создать экземпляр класса внутри себя, заключается в том, что вы можете проверить, существует ли в любой момент времени только один экземпляр. В этом весь смысл синглтона, в конце концов. Использование Singleton для соединения с базой данных гарантирует, что ваше приложение не устанавливает тонну соединений с БД одновременно.


Изменить: добавил $, как предложено @ emanuele-del-grande

64
26.09.2018 05:36:19
Есть небольшая ошибка, когда вы ссылаетесь на статический атрибут Connectionбез $входа self::Connection. Таким образом, интерпретатор PHP анализирует его как константу, которая, если она не определена, выдаст ошибку.
Emanuele Del Grande 22.03.2018 22:42:52