2014-10-30 147 views
0

我有一個基本的抽象類,說Base.php位於/lib/Helper/Base.php。現在,我有另一個班級,說Awesome.php位於/lib/Helper/Awesome/Awesome.php,這個類需要延長BasePHP擴展一級文件夾返回

我定義我的命名空間如下:

Base.php

<?php namespace Helper; 

abstract class Base 
{ 

} 

Awesome.php

<?php namespace Helper\Awesome; 

class Awesome extends Base 
{ 

} 

眼下,這個說,類Base不找到。我試圖使用require_once和/或includeBase.php的路徑,他們也沒有工作。我究竟做錯了什麼?

+0

你的2個類在不同的命名空間。嘗試'類Awesome擴展Helper \ Base'。 – 2014-10-30 19:40:11

+0

@RocketHazmat,我做到了。現在它說'Class'Helper \\ Awesome \\ Helper \\ Base'not found'。如果我使用'Helper \ Base'不擴展我定義的名稱空間嗎? – Kousha 2014-10-30 19:44:05

+1

我有一種感覺,它會這樣做。我的意思是發佈'類Awesome extends \ Helper \ Base'。主要的斜槓應該使它從根開始。您可能仍然需要「包含」該文件。 – 2014-10-30 19:45:29

回答

3

您正在包含該文件,這是正確的做法。但是您也正在使用 名稱空間。

命名空間不是一個文件夾,這意味着命名空間'助手'不是一個文件夾,而是一個邏輯層次結構。爲了在邏輯命名空間Helper中使用Base類,Awesome類需要用全邏輯路徑擴展基類,即\Helper\Base

namespace Helper\Awesome; 

class Awesome extends \Helper\Base { 

} 

或使用use/as關鍵字代替(如C#using語句)。

namespace Helper\Awesome; 
use \Helper\Base as Base; 
class Awesome extends Base 
{ 

} 

更多信息可以從php.net網站上獲得。 這裏是直接參考:http://php.net/manual/en/language.namespaces.importing.php

+0

這個伎倆!我仍然不得不按照@RocketHazmat的建議'包含',因爲它可以工作,儘管 – Kousha 2014-10-30 19:48:52

+0

請記住,命名空間開始處的'\'(當使用邏輯路徑而不是聲明時)很重要。如果你忘了它,並嘗試做'class x extends a \ b \ c',並且你已經在頂部聲明'namespace x \ y \ z',你試圖訪問'\ x \ y \ z \ a \ b \ c'(而''是指'\ a \ b \ c')。 – 0xGiddi 2014-10-30 19:52:32