在为我的 CMS 制作模块系统时,我偶然发现了一个我希望以更好的方式解决的问题(如果可能的话)。
我有一个抽象类(简化):
abstract class aModule {
function __construct() {
include(dirname(__FILE__).'/resources/content.php');
}
}
当我实例化这个类的孩子时,我期望会发生什么,例如:
class SomeModule extends aModule {
}
$sm = new SomeModule();
是FILE常量是 SomeModule 类文件的位置,但它需要父类文件,当然包含不起作用。*注意:两个类文件都包含在外部 ModuleManager 引擎中,因此我无法使用 $_SERVER['SCRIPT_FILENAME']。
我以丑陋的方式解决了这个问题,我制作了这样的抽象类构造函数:
function __construct($fileLoc) {
include(dirname($fileLoc).'/resources/content.php');
}
因此,要使模块工作,我需要使其具有自己的构造函数:
function __construct() {
parent::__construct(__FILE__);
}
这迫使任何制作模块的人在他的模块类定义中包含这个确切的构造函数,据我所知,编程中的任何重复都是不好的。
那么,有没有一种方法可以让我的抽象类知道子类文件的位置,或者这是唯一的方法吗?