PHP OOP理论 - 在课堂内外进行错误检查?

sam*_*sam 8 php oop

我正在转向使用OOP进行我的所有项目,历史上我所构建的一切都非常小,OOP似乎不是一个有效的选择,但现在有了大型项目.然而最近我遇到了越来越多的"最佳实践"问题,我找不到答案.

例如,假设我有以下内容:

class numbers{

    function __construct($number){
        $this->number = (int)$number;
    }

    function add($add){
        $this->added = $this->number + $add;
    }

    function multiply($multiply){
        $this->multiplied = $this->number * $multiply;
    }

    function minus($minus){
        $this->minused = $this->number - $minus;
    }

    function number(){
        return $this->number();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在让我们说我想要申请add,multiply然后minus.每个阶段都可能失败(我没有在示例中包含它,但想象它就在那里).这是我的问题所在,我应该这样做:

$numbers = new numbers(8);
if($numbers->add(7)){
    if($numbers->multiply(6)){
        if($numbers->minus(7){
            echo $numbers->number();
        }else{
            echo 'error minusing';
        }   
    }else{
        echo 'error multiplying number';
    }   
}else{
    echo 'error adding number';
}
Run Code Online (Sandbox Code Playgroud)

或者我应该在构造函数中包含该部分,例如:

class numbers{

    function __construct($number){
        $this->add(6);
        $this->multiply(9);
        $this->minus(7);
        if($this->error){
            return false;
        }else{
            return true;
        }
    }

    function add($add){
        $this->added = $this->number + $add;
        if(!this->added){
            $this->error = "couldn't be added";
        }
    }

    function multiply($multiply){
        $this->multiplied = $this->number * $multiply;
        if(!this->multiplied){
            $this->error = "couldn't be multiplied";
        }
    }

    function minus($minus){
        $this->minused = $this->number - $minus;
        if(!this->minused){
            $this->error = "couldn't be minused";
        }
    }

    function number(){
        return $this->number();
    }

    function error(){
        return $this->error();
    }

}
Run Code Online (Sandbox Code Playgroud)

然后简单地做:

$numbers = new numbers(5);
if($numbers){
    echo $numbers->number();
}else{
    echo $numbers->error();
}
Run Code Online (Sandbox Code Playgroud)

很抱歉,如果示例是冗长的(也忽略了错误,我在这里写的只是为了概述我正在尝试做的事情,这不是我正在使用的代码......)但我不知道如何用短语没有例子的问题.基本上,我应该检查班级内部的错误,还是应该在我打电话给班级时在外面做?

Gia*_*ian 11

在类内更新实施一致性几乎总是有意义的(即任何时候方法都可以改变类的内部状态,检查输入).然后使用异常使其成为调用者的问题,如果该输入格式不正确,或者该操作将违反某些类不变量.

  • 来自我的+1.陈述比我(现已删除)的回复更好的东西.我还没喝咖啡. (3认同)