我需要扩展一个项目.所有类都在单独的文件中,我需要扩展一些类而不重写其他文件中的现有代码.我的想法是使用命名空间,但我失败了.这是一个例子:
我已将原始的A.php类文件重命名为A_Original.php:
class A
{
public function hello()
{
echo "hello world from Class A\n";
}
}
Run Code Online (Sandbox Code Playgroud)
然后创建了一个新的A.php:
namespace AOriginal {
include 'A_Original.php';
}
namespace {
class A
{
public function hello()
{
echo "hello world from Class A Extended\n";
}
}
}
Run Code Online (Sandbox Code Playgroud)
这会失败,因为在including原始的A_Original.php文件中,类被转储到全局范围(因此忽略命名空间命令).我无法修改A_Original.php文件中的现有代码,但重命名是可以的.
其他项目文件(我无法修改)使用a require "A.php".
怎么做到这一点?
cyd*_*ydo -4
怎么样eval()?
新的A.php
$lines = file('a_original.php');
array_unshift($lines, 'namespace AO;?>');
$string = implode(chr(13).chr(10), $lines);
eval($string);
class A extends AO\A
{
public function hello()
{
parent::hello();
echo "hello world from Class A Extended\n";
}
}
Run Code Online (Sandbox Code Playgroud)