Интерфейсы с возвращаемыми типами и SOLID

С момента выпуска PHP 7 я снова просматриваю принципы SOLID. В частности, идея принципа подстановки Лисков, который в двух словах гласит, что любое расширение класса должен иметь возможность использоваться везде, где может использоваться его родительский класс.

Частью этого принципа является кодирование для интерфейса, поэтому ваши методы имеют определенные контракты, которым нужно следовать. Однако в PHP 5 и ниже возвращаемые типы не существуют. Таким образом, хотя вы должны иметь те же типы параметров, которые передаются в методы с использованием интерфейсов, вы можете возвращать любой старый тип, который вам нравится. В больших проектах придерживаться этого принципа намного сложнее, чем в других языках.

У меня еще не установлен PHP 7, чтобы проверить это, и я не видел никакой документации в руководстве по PHP или на каких-либо сайтах блогов, рекламирующих новые функции.

Возможны ли возвращаемые типы с интерфейсами в PHP 7?


person myol    schedule 18.02.2016    source источник
comment
Вот RFC: wiki.php.net/rfc/return_types, в котором говорится, что он предназначен для v7.   -  person Jared Farrish    schedule 19.02.2016
comment
github.com/php/php-src/pull/997   -  person Jared Farrish    schedule 19.02.2016
comment
Я думаю, что да подводит итог. Хорошая концепция вопроса, хотя.   -  person scrowler    schedule 19.02.2016


Ответы (2)


Да.

В PHP 7 добавлена ​​поддержка объявлений типа возвращаемого значения. Подобно объявлениям типа аргумента, объявления типа возвращаемого значения определяют тип значения, которое будет возвращено функцией. Для объявлений типа возвращаемого значения доступны те же типы, что и для объявлений типа аргумента.

Документация по PHP

person Mihai Răducanu    schedule 19.02.2016

Кажется, из-за этого вопроса как-то возникла небольшая путаница? Несмотря на это, ссылка @Jarrid содержала информацию, которую я пропустил, и, кажется, полностью отвечает моему любопытству.

Объявление возвращаемых типов имеет несколько мотиваторов и вариантов использования:

  • Не позволяйте подтипам нарушать ожидаемый возвращаемый тип супертипа, особенно в интерфейсах.
person myol    schedule 19.02.2016