PHP - 面向对象的实践和继承



这是基本的类设计

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' 短片

最新更新