Php 返回混合错误和布尔值的替代方法

Php 返回混合错误和布尔值的替代方法,php,error-handling,function,Php,Error Handling,Function,我有一个(常见的)情况,我当前返回的结果是混合类型,有时是布尔值,有时是错误消息。例如: function checked_thing_is_legal(){ // Do stuff and check for errors in here. } // Returns true if there are no errors, otherwise returns an error message string. 这感觉很糟糕,有人曾经说过“将代码提取为单个可靠的返回值很好”,我发现这是一个很好

我有一个(常见的)情况,我当前返回的结果是混合类型,有时是布尔值,有时是错误消息。例如:

function checked_thing_is_legal(){
 // Do stuff and check for errors in here.
} // Returns true if there are no errors, otherwise returns an error message string.

这感觉很糟糕,有人曾经说过“将代码提取为单个可靠的返回值很好”,我发现这是一个很好的建议。那么,检查错误的更好范例是什么呢?

将是一种经典的方法……

您有以下几种可能性:

  • 对类型执行开关检查
  • 为每种类型()创建异常/类
    • 我在这里看到两个选项

      使用原子(布尔)验证器并将错误消息与验证器本身分离

         if(!is_valid_email(blah)) print "invalid email";
      
      将验证器对象与布尔测试()和字符串错误()函数一起使用:

      $v = new SomeValidator;
      if(!$v->test(blah))
        echo $v->error();
      

      在快速和肮脏的应用程序中,如果一切正常,

      也可以考虑返回空值。
       $err = validate_email(blah);
       if(empty($err)) ok else print $err;
      

      @盖伦。。。。我也不建议将异常作为第一选择…^^^,顺便说一句,这个例子看起来不像是php的“新手”能够理解它。@stereofrog-当错误消息不可接受时(我知道这有点超出OP的问题范围)该怎么办。我想在这种情况下,您应该返回false,@mikemore。我个人使用了这里列出的两种方法,并发现一个单独的错误打印功能更清晰,因为在成功测试中没有模糊性+1.