Я буду использовать следующий пример, чтобы проиллюстрировать мой вопрос:
class Attribute {}
class SimpleAttribute extends Attribute {}
abstract class AbstractFactory {
abstract public function update(Attribute $attr, $data);
}
class SimpleFactory extends AbstractFactory {
public function update(SimpleAttribute $attr, $data);
}
Если вы попытаетесь запустить это, PHP будет генерировать фатальную ошибку, заявив, что Declaration of SimpleFactory::update() must be compatible with that of AbstractFactory::update()
Я точно понимаю, что это значит: эта сигнатура метода SimpleFactory::update()
должна точно соответствовать таковой родительского абстрактного класса.
Однако мой вопрос: есть ли способ разрешить конкретный метод (в данном случае, SimpleFactory::update()
) переопределить подсказку типа действительному потомку исходного подсказки?
Примером может служить оператор instanceof
, который вернет true в следующем случае:
SimpleAttribute instanceof Attribute // => true
Я понимаю, что, работая вокруг, я мог бы сделать тип hint одним и тем же в конкретном методе и сделать экземпляр проверки в самом тесте метода, но есть ли способ просто обеспечить его соблюдение на уровне подписи?