我是php新手并且第一次尝试使用namespace
s而且我在一个大的php文件中有这个疯狂的问题(简化如下):
B.php:
namespace Logic;
class C {}
class B {}
a.php只会:
use Logic\C;
class A extends \BaseClass {
public function __construct() {}
// [...500 lines of code...]
private function hi() { $c = new C(); }
}
hi
方法会出错:Class 'Logic\\C' not found in A.php
但是如果我只是在A的构造函数中引用B,它就会按预期工作:
class A extends \Base {
public function __construct() { $dummy = new C(); }
// [...500 lines of code...]
private function hi() { $c = new C(); }
}
当运行上述修改代码中的hi
方法时,没有问题。
有人能想出为什么会发生这种情况的合理解释吗?我在php中滥用命名空间吗?
答案 0 :(得分:2)
您需要了解,use
语句不会自动包含定义Logic\C
的源代码文件。在访问该文件中的类之前,您需要使用自动加载器或手动require_once
该文件。
我建议遵循有关命名空间的手册(以及那里的示例):http://php.net/manual/en/language.namespaces.php