php:过程到对象 - 结构?

时间:2013-02-22 10:05:11

标签: php class

多年来,我一直在写一个办公室管理应用程序(打开和关闭)。我需要重写它,因为代码已经变得不可维护,所以我将选择一个PHP框架并将业务逻辑重写为类。

现在我遇到了这个基本问题:我还需要返回结果吗?如果是,我该如何捕获结果?一些伪代码使我的问题清楚:

function a( $1, $2, $3 ) {
 doThis( if ... return TRUE; if ... return FALSE; );
 if ( doThis() != TRUE ) { return; }
 doThat();
}

VS

class example {
 private $1;
 private $2;
 private $3;
 public function go() { $this->doThis(); $this->doThat(); }
 private function doThis(){}
 private function doThat(){}
}
$a = new example;
$a->go();

如果doThis() - 方法没有按预期执行,如何停止执行go() - 方法?我认为如果某个属性设置为false,我不应该返回布尔值并检查每个方法?或者我只是在出现问题时抛出异常,如果一切正常就不做任何事情?

这是非常基本的,我知道......

THX!

1 个答案:

答案 0 :(得分:1)

例外情况适用于exceptional behaviour,因此不要因为您的代码不处于首选状态而抛出异常。在编写OOP时,有些人仍然设法在使用面向对象的框架时编写程序,显然你想避免这种情况,一个简单的经验法则是不写God-objects

现在我猜你要做的就是调用两个应按特定顺序调用的函数,有几种方法可以做到这一点,它实际上归结为你有什么样的类。假设你有一个Person类型的对象,那么你可能想从其他地方调用该人的不同方法:

$john = new Person();
$john->tryToWakeUp();
if($john->isAwake) {
    $john->brushTeeth();
} else {
    echo "John is still sleeping!";
}

另一方面,你可能有一个Engine类型的对象,它可能想在内部为某些操作做几件事,比如开始:

class Engine {
    public function start() {
        $this->checkFuel();
        if($this->hasFuel()) {
            try {
                  $this->initializeSomethingThatHasToDoWithEngineStartUp();                
            } catch (EngineException $ee) {
                  $this->engineState = BAD_ENGINE;
                  Logger::log("Engine did not start");
            }
        }
    }
}

我建议您在尝试转换所有业务规则之前阅读面向对象的设计并使用它,因为很可能在您知道您设计错误的一半时。面向对象的设计并不容易,但它确实有意义编辑:( 它应该有意义