2013-11-26 4 views
0

누군가 다음과 같은 설명을 할 수 있습니까? 버그입니다.'implements'를 사용하는 클래스 해상도 quirk

<?php 

class A implements JsonSerializable { 
    public function jsonSerialize() { return []; } 
} 

new A(); 
new B(); 
new C(); 

class B {} 
class C implements JsonSerializable { 
    public function jsonSerialize() { return []; } 
} 

는 다음과 같은 결과

$ php test.php 

Fatal error: Class 'C' not found in test2.php on line 9 
+0

new B(); 클래스 B 이전에 호출되었고 분명히 찾을 수 없습니다. –

+0

클래스를 호출하기 전에 정의 할 수 있습니까? 엔진이 정상적으로 작동하지 않으면 확실히 더 나은 디자인 패턴입니다. – LuckySpoon

+0

그래, 내 질문을 직접 해결했습니다 - 설명서는 "클래스는 인스턴스화 전에 정의되어야하며 어떤 경우에는 필수 사항입니다."라고 말합니다. 필자가 발견 한 문제는 정의하기 전에 호출하는 implements 문을 제거했을 때입니다.> 일부 사례는 문서의 필수 부분이었습니다. –

답변

0

그것은 꽤 쉽습니다을 가지고, 클래스 정의 후 인스턴스를 이동합니다. PHP는 8 행에서 클래스 B를 찾지 못합니다.

0

클래스는 인스턴스화 전에 정의해야하며 경우에 따라서는 요구 사항입니다.

구현을 사용할 때 요구 사항이므로 구현 문 없이도 작동합니다.