2016-09-13 3 views
0

this question의 응답을 기반으로하면 코드가 작동 할 것으로 예상되지만 어떤 이유로는 그렇지 않습니다. 내 클래스 라이브러리에서 클래스를 확장하는 간단한 클래스가 있습니다.PHP는 자동 클래스 확장 클래스를 사용합니다.

$custom = new MyClass(); 
class MyClass extends MyAbstractClass{ 

    public function __construct(){ 
     parent::__construct(); 
    } 

} 

_custom.php 불행하게도 나는이 치명적인 오류 얻을 :

Fatal error: Class 'MyClass' not found in ...

을하지만이 extends MyAbstractClass를 제거하면 다음 오류가 사라집니다. 클래스를 확장하려고 시도 할 때 MyAbstactClass을로드하려고 시도하지 않아서 MyClass이 전혀 발견되지 않는 문제가있는 것처럼 보입니다.

이것에 대한 의견이나 제안이 있으십니까?

+0

오류가 사라 졌는지 또는 하나의 표시를 디버그하는 데 더 쿨한/열악한가요? – bassxzero

+0

또한 오토로더 코드 – bassxzero

+0

을 표시해야합니다. 예상 한대로'MyClass' 자동로드보다 확장을 제거하면 ... – Xtremefaith

답변

0

PHP는 해석 대상 언어이므로 PHP가 정의한 으로 정의됩니다. 이는 구문 앞에 구문 분석 된 코드입니다. 당신이 객체가 전화를 정의되지 않은 경우, 오토로더를 사용하여이 문제를 방지 할 수 클래스와

class MyClass extends MyAbstractClass{ 

    public function __construct(){ 
     parent::__construct(); #you are forcing a construct call, it is not required if the parent constructor has no args. 
    } 

} 

$custom = new MyClass(); 

, 그것은 주사한다 시도하고 주어진 코드에 의해 클래스를 구문 분석합니다.

마법 함수 __autoload()을 정의 할 수 있지만 __autoload() 함수가 더 동적이며 일정하지 않으므로 spl_autoload_register()이 더 바람직합니다.

+0

필자는 이전에'spl_autoload_register()'를 사용하는 것이 효과적이라는 것을 알았고, 현재의 리펙토르에서 오토로드를 구현했고 이제 순서가 영향을 받았다는 것을 알았습니다. 그것은 중요하지만 모든 것이 중요합니다. 설명 해줘서 고마워. – Xtremefaith

+0

클래스 이름이 들어있는 파일을 포함 시켰을 경우 * IF * 작업했을 수 있습니다. 개인적으로 나는 PS4 자동로드 클래스를 사용하여보다 효율적으로 수정했습니다. 그것은 네임 스페이스 별 클래스를 포함하고 어떤 폴더에 있는지도 정의합니다. 따라서 클래스 내에서'use \ lib \ db \ statement'를 사용하면 내 "webroot \ lib \ db"에서 "statement.php"를로드하려고 시도합니다 \ "디렉토리에 있습니다. – Xorifelse

관련 문제