2013-07-31 206 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 yes ..如果不需要它,它不會創建實例..在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失蹤

​​

p文件?

您可以測試將兩個類定義放在同一個文件中,以查看您的問題是否與包含A.php相關。還有,你是否收到錯誤信息?

+0

這是一段代碼(它工作)只是我更大的項目的一部分(它不工作) - 一切都需要我使用自動加載器要做到這一點... 我想知道這個問題的答案「有些時候,類不能被繼承或繼承另一個類嗎?」 – StellaireMan

+0

如果繼承失敗,您應該會看到一條錯誤消息。A的一個定義是一個可能性,意思是不是從你期望的那個繼承而來?爲了好奇心,在同一個文件中嘗試兩個定義。同時檢查get_parent_class(new B())的輸出; – Gavin

+0

我正在嘗試但每次失敗 - 致命錯誤:在第10行中找不到D'\ xampp \ htdocs \ singular \ libs \ Singular \ Bootstrap.php中的類'Singular \ Object' (肯定 - 我已經獲得了所有文件) – StellaireMan

1

我有一個類似的問題,讓我發瘋。作爲一個測試,我甚至複製了父類,將其重命名(即抽象類的代碼與文件名和類名完全相同),並繼承問題是「固定的」。奇怪的!。

在我的例子中,我發現另一個類有導致錯誤的類的require_once(即原始海報示例中的'B')並移除(例如)'require_once B'修復了它。不知何故,我必須介紹一些循環引起的PHP導致不加載類 - 我不知道爲什麼,如果有人有想法,我很想增加我的知識。

無論如何......我剛剛移動到使用spl_autoload_register(絕對要走的路)。 現在,使用spl_autoload_register和去除require_once時,我發現一個似乎已經解決了這個問題。

我知道這個回覆對於原始海報來說太晚了,但我希望這可以幫助別人把他們的頭髮(像我一樣)帶出類似的問題。