2011-08-26 56 views
0

我必須聲明的開頭命名一個文件,然後它的兩個支持文件定義像X,Y類等PHP名稱間距問題延伸

包括現在在主文件,之後聲明命名空間,我不能再創建擴展X的類。我還沒有在X或Y中聲明一個名稱空間,我在主文件的頂部假設定義位於主文件的頂部,在包含之前會處理這個問題?該類只是默認解析到我的命名空間\ X?

例如,在我的PHP文件,我爲此在開頭:

namespace SGOAuth; 
include 'OAuth.php'; 
include 'CURL.php'; 

後來一類我在這個文件中定義嘗試:

class MyClass extends CURL {...} 

但我得到的錯誤:SGOAuth \ CURL未找到

謝謝!

+3

而不是描述問題,你可以請張貼一些代碼示例,顯示問題? – deceze

+0

@deceze'在adition'中,而不是'代替':) – yoda

+0

完成,對不起, – pll

回答

1

除非在命名空間SGOAuth中聲明CURL類,當然它不會存在於命名空間SGOAuth中。只包含一個文件並不意味着它是包含該文件的文件所在的命名空間的一部分(現在是一個句子;))。這將使命名空間毫無意義。

CURL.php

// no namespace declaration, defaults to global namespace 
class CURL { } 

foo.php

// namespace declaration, all code *in this file* is in namespace Foo 
namespace Foo; 

// includes the CURL class, which is in the global namespace 
include 'CURL.php'; 

new CURL; // error, class does not exist in this namespace 
new \CURL; // works 

所以class CURL默認情況下是在全局命名空間。要擴展它,你需要extends \CURL

+0

好吧,如果這個類不存在於當前的命名空間中,我必須在它的前面加上\來讓它引用全局命名空間中的類?我在閱讀文檔時感到,如果它在當前名稱空間中沒有解決,它會自動嘗試全局文件嗎? – pll

+0

@pll僅適用於函數和常量,不適用於類:http://www.php.net/manual/en/language.namespaces.fallback.php – deceze