PHP和函数错误

时间:2011-02-28 13:35:54

标签: php function error-handling

我一直在寻找什么是处理函数错误的最佳方法。 “DIE”方法是否合适?

即。 php函数调用另一个,例如:

function login(){
     $result = verifyDetails("bob", "password123");
     if($result == "accepted"){
          echo "Welcome bob";
     }else{
          echo "Error!! \n";
          echo $result;
     }
}

function verifyDetails($user, $pass){
     if(empty($user) || empty($pass)){
          die("cannot be empty");
     }

     if($user == "bob" && $pass == "password"){
          return "accepted";
     }else{
          die("username or password incorrect");
     }
}

“DIE”方法是返回消息还是一切都停止了?

提前致谢


更新

如果输出未知怎么办?

例如,

。在上面的例子中,我把“接受”作为唯一正确答案。

如果返回的是姓名或身份证号码怎么办?那么你就无法真正区分错误和正确的回报。

再次感谢。


更新/可能的解决方案

function login(){
     $result = verifyDetails("bob", "password123");
     if($result[0] == "SUCCESS"){
          echo "Welcome bob";
     }else if($result[0] == "ERROR"){
          echo "Error!! \n";
          echo $result;
     }else{
          echo "Unknown Error!!";
     }

}

function verifyDetails($user, $pass){
     $msg = array();

     if(empty($user) || empty($pass)){
          $msg[0] = "ERROR";
          $msg[1] = "cannot be empty"
          return $msg;
     }

     if($user == "bob" && $pass == "password"){
          //say $customerID is extracted from a db
          $msg[0] = "SUCCESS";
          $msg[1] = $customerID
          return $msg;
     }else{
          $msg[0] = "ERROR";
          $msg[1] = "username or password incorrect"
          return $msg;
     }
}

想法&欢迎提出有关上述“可能”解决方案的建议


更新

使用数组

检查Shikiryu update 2 answer for a clean version

4 个答案:

答案 0 :(得分:1)

在您的情况下,唯一可接受的方式是return FALSE

如果这些函数实际上是某些类的方法,请使用类变量来存储实际错误。 如果这些函数不属于任何类,我根本不会使用它们,而是用普通代码写

 if($user == "bob" && $pass = "password"){
      echo "Welcome bob";
 }else{
       echo "incorrect username or password");
 }

更新回答

没有什么可以发明的。按照PHP的方式:
使函数返回值或FALSE

然而,为了验证目的,你必须这样做:

function validSomething($val){
  return (bool)rand(0,1);
}
$err = array();
if (!validSomething($var)) {
  $err[] = "Whatever error";
}

即。 function只返回布尔值和应用程序逻辑添加的实际错误消息。

但是,在您的示例中,用户定义的函数完全被滥用。

答案 1 :(得分:1)

die()只需echo您的消息并停止播放脚本,因为die()exit()的别名。

在您的情况下,由于密码不是password而是password123,因此脚本将停止仅显示“用户名或密码不正确”。

但正如我在这里看到的那样,你需要一个return "cannot be empty";,以便显示:

  

错误!   用户名或密码不正确

(以及die()不会的其余html


更新2(丑陋的方式):

function login(){
     $result = verifyDetails("bob", "password123");
     if(isset($result['success']){ // verifyDetails return true?
          echo $result['success'];
     }else{
          echo "Error!! \n";
          echo $result['error']; // Display the error verifyDetails throws
          // You may want to check if $result['error'] exists.
     }
}

function verifyDetails($user, $pass){
     if(empty($user) || empty($pass)){
          return array('error'=>"cannot be empty");
     }

     if($user == "bob" && $pass == "password"){
          return array('success'=>"Welcome bob");
     }else{
          return array('error'=>"username or password incorrect");
     }
}

答案 2 :(得分:1)

die终止在调用它的行上执行PHP脚本。因此,您的消息将不会被退回。

您可能只想使用return代替die;

答案 3 :(得分:1)

是的,您可以使用die()进行调试。

does the "DIE" method return the message or does everything come to a standstill?

是的,它会返回错误消息,是的,脚本将停止继续。