LSP для конструктора__construct — особенный метод класса в PHP. В частности, онне подчиняется LSP, то есть в подклассе сигнатура конструктора может быть изменена как угодно. Это удобно в большинстве случаев, но не всегда.
Иногда в базовом классе мы хотим предложить статическую фабрику. Чтобы она работала корректно, конструкторы подклассов должны соблюдать LSP. Есть два варианта, как это гарантировать.
1️⃣ Зафиналить конструктор в базовом классе. Минус в том, что мы не сможем инициализировать состояние в подклассе. Можно, конечно, добавить в базовый класс костыль в виде метода initialize, но есть решение поэлегантнее.
2️⃣ Попросить Psalm проверять LSP для __construct при помощи @psalm-consistent-constructor. Если конструктор подкласса не будет соблюдать сигнатуру, Psalm выбросит ConstructorSignatureMismatch.
psalm.dev/docs/ru…ntiation