在类中包含PHP异常的位置?

时间:2016-09-14 21:25:40

标签: php class exception methods

我是OO PHP的新手......我正在尝试创建一个名为MyClass的PHP类,以及一些应该采用的方法:

  1. 验证参数是否为数字
  2. 验证参数是否已定义
  3. 如果上述任何一项失败,我需要发送带有解释的例外
  4. 我已经完成了1.和2.但是不知道如何处理异常,你需要包含它们?内部MyFunction方法的isNumeric/isDefined内部方法。你能帮忙解决这个问题。

    我的剧本:

    <?php
    
    namespace Quotations;
    
    class MyClass {
    
    var $is_number;
    var $is_defined;
    private $number;
    private $defined;
    
    private function isNumeric($w, $c){
        if(is_numeric($w) && is_numeric($c)){
            $number = true;
        }
        else{
            $number = false;
        }
    
        return $number;
    }
    
    private function isDefined($t, $f, $w, $c){
        if(isset($t, $f, $w, $c)){
            $defined = true;
        }
        else{
            $defined = false;
        }
    
        return $defined;
    }
    
    function MyFunction($to, $from, $weight, $cube) {
        try{
            if(!$this -> isNumeric($weight, $cube)){
                throw new InvalidArgumentException('Arguments are not numeric');
            }
    
            if(!$this -> isDefined($to, $from, $weight, $cube)){
                throw new BadMethodCallException('Arguments are missing');
            }
        }catch(InvalidArgumentException $e){
            echo 'Caught exception: ',  $e->getMessage(), "\n";
        }catch(BadMethodCallException $e){
            echo 'Caught exception: ',  $e->getMessage(), "\n";
        } 
    }
    
    ?>
    

1 个答案:

答案 0 :(得分:1)

我会建议这样的事情:

function MyFunction($to, $from, $weight, $cube) {
    if(!$this -> isDefined($to, $from, $weight, $cube)){
        throw new \BadMethodCallException('Arguments are missing');
    }
    if(!$this -> isNumeric($weight, $cube)){
        throw new \InvalidArgumentException('Arguments are not numeric');
    }
    //do stuff
}

这就是你如何处理它:

try{
    $MyClassObject->MyFunction($arg1, $arg2, $arg3, $arg4);
}catch(BadMethodCallException $e){
    //handle missing arguments ...
}catch(InvalidArgumentException $e){
    //handle invalid argumets ...
}

所以,这只是基本用法的一个例子。您可以根据需要随意调整它。

注意,如果在函数中缺少非可选参数,PHP将生成E_WARNING