在类方法中使用PHP中的命名空间类

时间:2015-02-11 12:48:10

标签: php

我是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中滥用命名空间吗?

1 个答案:

答案 0 :(得分:2)

您需要了解,use语句不会自动包含定义Logic\C的源代码文件。在访问该文件中的类之前,您需要使用自动加载器或手动require_once该文件。


我建议遵循有关命名空间的手册(以及那里的示例):http://php.net/manual/en/language.namespaces.php