包含命名空间类名冲突


Namespace class name included conflict

我正在构建一个命名空间,它使用与我包含在命名空间中的类相同的类名。

require_once 'MyClass.php'; // already declares a class MyClass
namespace foo;
class MyClass {}
class MySubClass extends MyClass {}

如果没有"你不能重新声明类...",我将如何做到这一点?

首先,命名空间声明必须是第一个语句;当你这样做时,它将正常工作:

namespace foo;
require_once 'MyClass.php'; // already declares a class MyClass
class MyClass {}
class MySubClass extends MyClass {}

现在,'MyClass是指您在MyClass.php中声明的类(假设它是在没有特定命名空间的情况下声明的),而MyClass是指当前命名空间中的类。

或者,您可以为其别名:

namespace foo;
use MyClass as StdMyClass;
require_once 'MyClass.php'; // already declares a class MyClass
class MyClass {}
class MySubClass extends MyClass {}

在这种情况下,StdMyClass可以看作是'MyClass的别名。