1

这是基本的类设计

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(). 这可能与魔术功能有关吗?

4

3 回答 3

3

在我看来,我会使用这种方式:您可以在 Randomizer 中定义构造函数并调用 parent:: _construct,而不是在 Randomizer 的 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);
} 

}

于 2012-04-25T06:00:03.577 回答
2

经过一番思考,我意识到这是糟糕的设计。我必须保持代码库简单且可扩展,这只会在大型项目中造成混乱。

由于唯一调用 Randomizer::exec() 的程序是我内部构建的程序,因此我可以在上一行调用 CustomModule::exec() 并获得一个布尔响应以查看它是否应该继续到下一行。

很抱歉不得不结束这个 Q' 短

于 2012-04-25T06:09:25.577 回答
2

如果您的对象需要一些初始化才能“释放*”到应用程序的其余部分,那么这意味着您需要一个工厂。如果您只需要调用某个方法一次,这就是您应该解决的方法。

如果每次调用exec()方法时都发生这种执行,那么您应该使用某种包含(以装饰器的形式或只是对象的标准组合)。

基本上,您需要重组代码。

于 2012-04-25T06:10:36.353 回答