我试图让PHP在尝试创建特定类时从另一个命名空间获取一个类。用另一个命名空间中的同一类替代对象创建
我有两个班被称为“页”,首先是在核心命名空间:
namespace Core;
class Page {...}
从核心\页第二继承,但增加了一些东西。它位于Addons名称空间中。
namespace Addons;
class Page extends \Core\Page{...}
我想这样做的原因是因为我想用简单的插件引擎构建我的系统。无论何时,我都可以在XML文件中添加一行,告诉自动加载功能在addon命名空间而不是核心命名空间中使用该类。
然而,当我尝试这样做:
spl_autoload_register('loadClass');
public function loadClass(string $className)
{
if (Addon_exist_and_is_registered($className))
{
require "/Addons/$className.php";
}
else
{
require "/Core/$className.php";
}
}
$page = new \Core\Page(); <-- error here
我得到一个错误,说\核心\页面无法在文件扩展中心中发现的类\ page.php文件。这是正常的行为,因为该类不在同一个名称空间中,因此,完全限定的名称找不到正确的类。
是否有可能让PHP认为另一个命名空间中的子类实际上是正确的类?我为插件类尝试了这个;
namespace Core;
class Page extends \Core\Page{...}
但它打破了继承,因为你不能继承自己。
的问题是,你必须包含** **双方班,使' Addons \ Page'工作。没有其他办法了。 – apokryfos