D
D
devastation_kvlt2016-12-09 12:08:40
PHP
devastation_kvlt, 2016-12-09 12:08:40

Why does type hint swear at the heir?

I can not understand one thing:
There is an abstract class Model , it has Employee and Department descendants .
There is an abstract class TableDataGateway , it has EmployeeTDGW and DepartmentTDGW
heirs. I write in the TableDataGateway class : abstract public function add( Model $object); - meaning that only Model and its descendants can be passed
In child classes, I want to see something like public function add( Department $department) - I clarify that not any Model , but only Department
Но выскакивает warning кричащий о несоответствии типов. Пришлось в наследниках так-же прописывать Model в качестве переданных параметров.
Как можно сделать такое уточнение и что-бы валидатору понравилось моё решение?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
M
mistergonza, 2016-12-09
@devastation_kvlt

Для абстрактных методов в классах потомках область видимости может варьироваться (она должна быть такой же или менее строгой), а вот сигнатуры методов должны совпадать. В интерфейсах также сигнатуры методов должны совпадать.
Как вариант можно сделать проверку внутри реализации метода дочернего класса через instanceof.
P.S. Судя по названию классов вы случаем там не ZF2 ковыряете?

A
Arman, 2016-12-09
@Arik

Может попробовать указывать не класса, а интерфейсы?

M
Melkij, 2016-12-09
@Melkij

Пока нельзя. Наследник должен строго соответствовать контракту родителя.
https://wiki.php.net/rfc/generics Under Discussion

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question