Теория PHP 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();
    }
}

Теперь давайте скажем, что я хотите применить , добавить , затем , умножить и затем минус . Каждая стадия может потерпеть неудачу (я не включил это в пример, но представьте, что он есть). Вот где моя проблема, должна ли я сделать:

$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';
}

Или я должен иметь эту часть в моем конструкторе, например:

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();
    }

}

, а затем просто сделать:

$numbers = new numbers(5);
if($numbers){
    echo $numbers->number();
}else{
    echo $numbers->error();
}

Извините, если пример длинный, сложный (также игнорируйте ошибки, Я написал это здесь только для того, чтобы обрисовать, что я пытаюсь сделать, это не код, который я использую ...), но я не знаю, как сформулировать вопрос без примера. В основном, я должен делать проверку на ошибки внутри класса или я должен делать это снаружи, когда я вызываю класс?

8
задан Gian 3 September 2010 в 15:15
поделиться