PHP - Зачем делать конструктор приватным?
Вижу в Sentry и в других библиотеках конструкцию private function __construct
И при этом инициализируется класс через статичный метод. Есть ли какие то обоснования такого подхода?
private function __construct(?EventId $eventId, EventType $eventType)
{
$this->id = $eventId ?? EventId::generate();
$this->timestamp = microtime(true);
$this->sdkVersion = PrettyVersions::getVersion('sentry/sentry')->getPrettyVersion();
$this->type = $eventType;
}
/**
* Creates a new event.
*
* @param EventId|null $eventId The ID of the event
*/
public static function createEvent(?EventId $eventId = null): self
{
return new self($eventId, EventType::event());
}
Ответы (1 шт):
как выше писали - паттерн Singletone
например, если мы хотим чтоб объект создавался только один раз и использовался всегда только тот самый созданный экземпляр
<?php
class App {
private static $object;
private __construst() {
// какой то конструктор
}
public static function getApp() {
if (self::$object === null) {
self::$object = new self();
}
return self::$object;
}
}
и когда нам нужен объект App мы просто дергаем метод getApp() и получаем нужный объект, причем который создается всего один раз
Нужно, например, когда есть некий класс БД и нужно работать с ним. Нет смысла создавать много раз экземпляр класса и мы делаем некий метод получения инстанса и вызываем его для получения экземпляра класса для работы с БД. плюшки - экземпляр создается всего один раз и используется там где он нужен и нет нужны создавать много экземпляров класса и ттатить память, держать коннекты открытыми и т д