2011-08-26 48 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