2013-03-05 4 views
2

코드 :PHP OOP 인터페이스 입력 상속

interface entite 
{ 

} 

class Foo implements entite 
{ 

} 


$foo = new foo; 
if($foo instanceof entite) echo "he is"; 

표시 "라고이다". 푸 인터페이스 에서 유형 "entite을"상속하지만 때 시도 :

Fatal error: Declaration of FooDeleter::__construct() must be compatible with deleter::__construct(entite $entite)

이유 :

class FooDeleter implements deleter 
{ 
public function __construct(Foo $Foo) 
{ 

} 
} 

interface deleter 
{ 
public function __construct(entite $entite); 
} 

나에게 준다? 어떻게 ? = (

편집 : 당신이 인터페이스를 위반하는 인터페이스보다 더 엄격한 타입 힌트로 FooDeleter 생성자를 선언함으로써

class FooDeleter implements deleter 
{ 
public function __construct(entite $Foo) 
{ 
    if($Foo instanceof Foo) { ... }  
} 
} 
+4

"OOP 인터페이스"를 원하십니까? –

+1

이것은 Big Brown Book of PHP의 예제 코드입니다. –

+2

저는 PHP가 당신이 인터페이스에서 생성자를 정의 할 수있게 해주었습니다. 나에게 끔찍한 생각처럼 보입니다. 관련된 질문은 여기에 - http://stackoverflow.com/questions/783046/constructor-methods-in-interfaces – Phil

답변

2

: 실제로 그와 같은 입력 된 Deleter가 정의되는 독특한 방법.

당신이

public function __construct(entite $Foo) 

에 생성자를 변경 한 경우 ... 당신은 여전히 ​​Foo OBJE에 전달할 수 ct, 인터페이스가 올바르게 구현됩니다. PHP Document에 따르면

1

:

참고 :

동일한 메소드 서명을 인터페이스에 정의되어 같은를 사용해야합니다 인터페이스를 구현하는 클래스입니다. 그렇게하지 않으면 치명적인 오류가 발생합니다.

함수 이름과 인수 번호 및 인수 유형 (지정된 경우)은 메소드 서명의 일부 (모두?)이므로 정확히 동일한 메소드를 선언해야합니다.

new FooDeleter($foo)을 계속 사용할 수 있습니다.