클래스 유형 힌트가 인터페이스와 100 % 동일해야하는 이유는 무엇입니까?
내 말은 왜 클래스를 타입 힌트로 구현하는 것을 받아 들일 수 없는가? 인터페이스의 힌트 유형
<?php
interface MyInterface
{
public function doMethod(SomeInterface $a)
{
}
}
class MyClass implements MyInterface
{
public function doMethod(ClassThatImplementsSomeInterface $a)
{
}
}
오류 : Fatal error: Declaration of MyClass::doMethod() must be compatible with that of MyInterface::doMethod()
클래스 타입 힌트가 SomeInterface
구현 때문에, 나는 그것이 계약을 아프게하지 않습니다 기대합니다.
왜 내가 그것을 원하니? 인터페이스 유연성의 이점 때문입니다.
추상 클래스도 마찬가지입니다.
'do'메소드에 타입 힌트가 없도록 코드를 다시 작성하면 '수정'됩니다.
그러나 어떻게 든 $a
의 형식 힌트가 SomeInterface
을 구현해야한다는 계약을 정의해야한다고 생각합니다.
그리고 왜 그냥 SomeInterface
인 동일한 유형 힌트를 사용하지 않습니까?
내가 필요로하는 SomeInterface
에는 존재하지 않는 방법이 있기 때문입니다.
그럼이 제한 사항은 무엇입니까?
재현 할 codepad : 다른 클래스를 암시 http://codepad.org/2PLd8AmV
몇 가지 정보, 좋은 질문을 추가했습니다! – DanFromGermany
당신의 인터페이스는 "나는이 중 하나를 사용하겠다"고 말하고 구현은 "네, 나는 이것들 중 하나를 대신 사용하고 있습니다"라고 말합니다 ... 질문이 어디 있는지 보지 않습니다 – Dale