PHP - Зачем делать конструктор приватным?

Рейтинг: 0Ответов: 1Опубликовано: 03.03.2023

Вижу в 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());
}

Ответы

▲ 0

как выше писали - паттерн 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() и получаем нужный объект, причем который создается всего один раз

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