class RandomName extends CommonAppBase {}
,有没有办法自动创建任何扩展CommonAppBase
的类的实例,而不必显式使用new
?通常每个PHP文件只有一个类定义。在所有文件的末尾添加
new RandomName()
是我想要消除的事情。扩展类没有构造函数;只调用了CommonAppBase
的构造函数。CommonAppBase->__construct()
启动应用程序的其余部分执行。奇怪的问题,但如果有人知道解决方法就太好了。
编辑
进一步说明下面的评论。进行实例化的代码不会在类文件中。类文件将仅仅是这样,我想让一些其他代码
include('random.class.php')
并且实例化任何扩展CommonAppBase
的类。对于任何不确定我要什么的人,my hackish answer可以做到我想要的,但不是最理智的方式。
感谢您的提前帮助,Aiden
(顺便说一句,我的PHP版本是5.3.2)请在回答中注明版本限制。
答案如下:
可以通过php.ini或Apache将以下内容附加到文件中,以自动启动特定父类的类。
首先(感谢dnagirl)
$ca = get_declared_classes();
foreach($ca as $c){
if(is_subclass_of($c, 'MyBaseClass')){
$inst = new $c();
}
}
并且(接受的答案,作为最接近的答案)
auto_loader();
function auto_loader() {
// Get classes with parent MyBaseClass
$classes = array_filter(get_declared_classes(), function($class){
return get_parent_class($class) === 'MyBaseClass';
});
// Instantiate the first one
if (isset($classes[0])) {
$inst = new $classes[0];
}
}
new
。但是首先你需要这个是为了什么?在类文件内进行实例化并不是一个很好的做法。 - Pekka