【问题标题】:What is the standard way to return errors to the user from a function?从函数向用户返回错误的标准方法是什么?
【发布时间】:2011-06-12 22:14:06
【问题描述】:

从函数向用户返回错误的标准方法是什么? (电子邮件无效,已超过最大字符数等)

function register($name, $email) {
     if(!$name) {
            $registration_errors = 'name empty,';
     }

     if(!email) {
            $registration_errors = $errors . 'email empty,';
     }

     if($registration_errors) {
           return $registration_errors;
     }
     else {
         register stuff........
         return true;
     }
}

现在的问题是它总是返回 true,所以你不能这样做:

if(register()) {blah blah blah} else { put errors under inputs}

那么执行此操作的标准方法是什么?

【问题讨论】:

    标签: php class function return


    【解决方案1】:

    使用类似的东西

    function register
    {
    .. 
    else
    {
    return array('error' => $errorwhichyoufound);
    }
    ....
    }
    $result = register();
    if((array_key_exists('error', $result)))
    {
    
    }
    else
    {
    }
    

    这样您甚至可以检查个别错误。

    【讨论】:

      【解决方案2】:
      <?php
      // in your register function:
      $registration_errors = array();
      if (!$name) {
          $registration_errors['name'] = 'Name is required.';
      }
      // etc.
      ?>
      
      <!-- in your phtml: -->
      <?php if (array_key_exists('name', $registration_errors) echo $registration_errors['name'];?>
      <label for="name">Name</label>
      <input id="name" name="name" type="text" value="<?php echo $name; ?>" />
      

      【讨论】:

        【解决方案3】:

        有各种各样的方法可以做到这一点,您甚至可以认为其中一些是“标准的”。您可以返回一个包含错误代码的数组(如上面的答案),您可以将错误存储为对象属性(要求您将“注册”作为对象方法调用),您可以将错误存储在全局变量中,或者将错误放在已注册的位置。您可以传入变量引用并将变量值设置为错误。您可以反转返回逻辑,因此字符串为假,零为真值。您可能会引发错误。你可以抛出异常。

        这里真正的问题是“注册”函数应该执行某些功能,而您要求它清理输入以防万一发生有趣的事情。因此,如果您真的需要清理 $name 和 $email,为什么不在调用注册之前进行验证呢?无论如何,您将需要某种错误路径,并且可能会根据情况提供几种不同的错误消息。当您最终准备好调用 register 时,它应该会因自己的原因成功或失败,而不是因为业务规则需要非空的电子邮件地址。

        【讨论】:

        • 这些听起来不错。将验证放在函数之外是否“更好”?因为如果我想创建一个移动版本,或者从另一个地方调用函数来进行验证,这似乎更容易
        • 这样想:有一个注册“过程”和一个注册函数。验证是过程的一部分。手机版真的会一样吗?我不知道。也许您的移动验证代码需要检查一些额外的内容,例如标头或校验和或状态标志。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 2016-02-07
        • 2010-09-22
        • 1970-01-01
        • 2013-10-31
        • 2016-08-21
        相关资源
        最近更新 更多