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