我有一个文件在开头声明一个命名空间,然后包含两个支持文件,定义类,如X,Y等。
现在在主文件中,在声明命名空间之后,我再也无法创建扩展X的类了。我没有在X或Y中声明命名空间,我假设在主文件的顶部定义,包括,会照顾吗?该类是否应该默认解析为我的命名空间\ X?
例如,在我的PHP文件中,我在开始时这样做:
namespace SGOAuth;
include 'OAuth.php';
include 'CURL.php';
后来我在这个文件中定义的类尝试:
class MyClass extends CURL {...}
但我收到错误:找不到SGOAuth \ CURL
谢谢!
答案 0 :(得分:1)
除非在命名空间CURL
中声明SGOAuth
类,否则它将不存在于命名空间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
。