有一个项目,我需要扩展。所有类都在单独的文件中,我需要扩展一些类而不重写其他文件中的现有代码。我的想法是使用命名空间,但我失败了。这里有一个例子:PHP命名空间和包含()与类
我已经改名为原来 a.php只会类文件 A_Original.php:
class A
{
public function hello()
{
echo "hello world from Class A\n";
}
}
然后创建一个新的 a.php只会:
namespace AOriginal {
include 'A_Original.php';
}
namespace {
class A
{
public function hello()
{
echo "hello world from Class A Extended\n";
}
}
}
由于including
原始的A_Original.php文件,该类被转储到全局作用域(因此忽略命名空间命令),因此失败。 我无法修改A_Original.php文件中的现有代码,但重命名是可以的。
其他项目文件(我无法修改)使用require "A.php"
。
如何做到这一点?
不起作用,如果a_original.php类基于另一个类
class A extends SomeOtherClass
,因为现在这个其他类应该在同一个命名空间 - 这不是包括(“someotherclass.php”) - 它在全球范围内。 aaargs。我迷路了。包含()不应该改变当前的命名空间 - 但它确实! – cydo 2009-09-15 12:38:31