tgoop.com/phpproglib/5503
Last Update:
🧠 Ковариантность и контравариантность в PHP — кратко и по сути
Эти термины звучат сложно, но суть у них простая. Разработчики используют их идеи постоянно — просто не всегда знают, как это называется. Ниже — простое объяснение с примерами.
🔍 Что это такое?
Ковариантность — когда метод возвращает более конкретный тип, чем у родителя.
Контравариантность — когда метод принимает менее конкретный тип, чем у родителя.
✅ Ковариантность (return types)
PHP поддерживает ковариантность только для возвращаемых значений. Примеры:float|int
→ int
BaseClass
→ ChildClass
Exportable
→ Exportable&Cacheable
Можно «сузить» возвращаемый тип в дочернем классе — и это будет валидно.
❌ Контравариантность в return'ах
PHP не позволяет делать возвращаемый тип менее конкретным.
Например, int → float|int
— вызовет ошибку.
✅ Контравариантность (параметры)
А вот с параметрами всё наоборот — здесь PHP позволяет делать типы шире:array
→ array|Collection
Traversable&Collection
→ Collection
EloquentCollection
→ Collection
Такой подход делает методы более гибкими при переопределении.
❌ Ковариантность в параметрах
Нельзя в параметрах делать тип более конкретным, чем у родителя. Это приведёт к ошибке.
🚫 Конструкторы — отдельная история
Ковариантность и контравариантность на конструкторы не влияют. У них своя логика, и они не наследуются как обычные методы.
👉 Читать статью
BY Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Share with your friend now:
tgoop.com/phpproglib/5503