2013-07-31 3 views
0

저는 상속에 약간의 문제가 있습니다. 그클래스가 상속되지 않습니다. - 클래스를 찾을 수 없습니다.

파일 해서, A.php

namespace Main; 
class A{ 
    public function __construct(){ echo 'A->__construct'; } 
} 

같은 것을 가지고 B.php

namespace Main; 
class B extends \Main\A{ 
    /* if I write this construct and remove extends from this class - it works - but I need to inherit it */ 
    public function __construct(){ $a = new \Main\A(); } 

    public function something(){ echo 'B->something';} 
} 

클래스가있는 경우를 상속 될 수 없습니다 않은 파일 또는 다른 클래스를 상속 ?

+1

포함 했습니까? – MightyPork

+1

A와 B 모두 같은 이름 공간 내에서 정의되었으므로 '클래스 B는 A 확장'을해야합니다. – Orangepill

+0

@MightyPork 예 .. 필요하지 않은 경우 B-> 인스턴스를 만들지 않았습니다. __construct – StellaireMan

답변

0

이것은 작동합니다.

namespace Main; 
class A 
{ 
    public function __construct(){ echo 'A->__construct'; } 
} 

class B extends A 
{ 

    public function something(){ echo 'B->something';} 
} 

$test = new B(); 

출력 :

A->__construct

그래서이 수행합니다

namespace Main; 
class A 
{ 
    public function __construct(){ echo 'A->__construct'; } 
} 

class B extends \Main\A 
{ 

    public function something(){ echo 'B->something';} 
} 

$test = new B(); 

A->__construct

당신은 B.ph에

require_once "A.php"; 

누락 P 파일?

동일한 파일에 두 클래스 정의를 모두 테스트하여 문제가 A.php 포함과 관련이 있는지 확인할 수 있습니다. 추가로 오류 메시지가 나타 납니까?

+0

이것은 (작동) 코드의 일부입니다 (작동하지 않는 곳) - 더 큰 필자는 필자가 오토로더를 사용하고 있습니다. 그것을 할 ... 나는이 질문에 대한 답변을 알고 싶습니다. "클래스가 상속되거나 다른 클래스를 상속받지 못하는 경우가 있습니까?" – StellaireMan

+0

상속이 실패하면 오류 메시지가 나타납니다.A의 정의가 둘 이상일 수 있습니다. 즉, 예상 한 것과 상속하지 않을 가능성이 있습니까? 호기심을 위해서 같은 파일에서 두 정의를 모두 시험해보십시오. 또한 get_parent_class (new B())의 출력을 확인하십시오. – Gavin

+0

D : \ xampp \ htdocs \ singular \ libs \ Singular \ Bootstrap.php의 10 행에 'Singular \ Object'클래스가 없으므로 치명적인 오류가 발생할 때마다 시도하고 있습니다. (물론 - 나는 모든 파일을 요청했습니다) – StellaireMan

1

나는 미치겠다는 비슷한 문제가있었습니다.

테스트에서 필자는 부모 클래스를 복사하고 이름을 변경 했으므로 (즉, 추상 클래스의 코드는 파일 이름과 클래스 이름과 완전히 동일 함) 문제가 '수정'되었음을 상속합니다. 기묘한!.

필자의 경우 다른 클래스에 오류가 발생하는 클래스 (예 : 원래 포스터의 예제에서 B)와 require_once B가 제거 된 클래스 (예 : require_once)를 수정 한 것이 발견되었습니다. 어쨌든 PHP가 클래스를로드하지 않게하는 원형을 도입 했음에 틀림 없습니다. 아이디어가있는 사람은 내 지식을 늘리고 싶습니다.

어쨌든 ... 나는 방금 spl_autoload_register (확실히가는 길)로 이동했습니다. 이제 spl_autoload_register를 require_once 제거와 함께 사용하면 문제가 해결 된 것 같습니다.

나는이 답장이 원래 포스터에는 너무 늦었다 고 알고있다. 그러나 나는 이것이 비슷한 문제로 머리카락을 꺼내는 다른 사람을 돕기를 바랍니다.

관련 문제