这是基本的类设计
class CustomModule {
public __construct() { }
//Run me first automaticly
public function exec($str) { }
}
class Randomizer extends CustomModule {
public __construct() { }
//Call me
public function exec($str) { }
}
由于我正在为外部开发人员设计插件/模块系统,我需要先运行CustomModule->exec()
,我不想让开发人员必须调用 base->exec($str)
。
我希望在调用CustomModule::exec()
之前自动调用Randomizer::exec()
而无需将代码放入Randomizer::exec()
。这也许是魔术功能吗?
在我看来,我会使用这种方式:您可以在随机化器中定义构造函数并调用 parent::_construct,而不是在随机化器的 exec 中调用 _construct
。class CustomModule {
//Run me first automaticly
public function exec($str) { }
public __construct($str) {
$this->exec($str);
}
}
class Randomizer extends CustomModule {
//Call me
public function exec($str) {
parent::__construct($str);
}
}
如果你的对象需要一些初始化,然后才能"释放*到应用程序的其余部分,那么这意味着你需要一个工厂。这就是你应该如何解决它,如果你只需要调用某个方法一次。
如果每次调用该方法时都发生此类执行exec()
那么您应该使用某种包含(以装饰器的形式或只是对象的标准组合)。
基本上,您需要重新构建代码。
经过一番思考,我意识到这是糟糕的设计。我必须保持代码库简单且可扩展,这只会在大型项目中造成混乱。
由于调用 Randomizer::exec()的唯一程序是我的内部构建程序,我可以在上一行调用 CustomModule::exec() 并获得布尔响应以查看它是否应该继续到下一行。
很抱歉不得不结束这个 Q' 短片