Ошибки PHP и функций - PullRequest
       39

Ошибки PHP и функций

1 голос
/ 28 февраля 2011

Я искал, как лучше всего обрабатывать ошибки функций.Подходит ли метод "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;
     }
}

идеи и предложения по вышеуказанному "возможному" решению приветствуются


ОБНОВЛЕНИЕ

Проверьте ответ обновления 2 Шикирю ниже для более чистой версии с использованием массивов

Ответы [ 4 ]

1 голос
/ 28 февраля 2011

Да, вы можете использовать die() для отладки.

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

Да, возвращается сообщение об ошибке, и да, сценарий останавливается.

1 голос
/ 28 февраля 2011

die() просто echo ваше сообщение и остановите скрипт, потому что die () это псевдоним exit () .

В вашем случае,поскольку пароль не password, а password123, сценарий перестанет просто отображать «неправильное имя пользователя или пароль».

Но, как я вижу здесь, вам нужен return "cannot be empty";, чтобы онПокажу:

Ошибка !!Неверное имя пользователя или пароль

(и, необязательно, остальная часть HTML, которую die() не будет)


Обновление 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");
     }
}
1 голос
/ 28 февраля 2011

die прекращает выполнение скрипта PHP в строке, которую он вызывает.Поэтому ваше сообщение не будет возвращено.

Возможно, вы захотите просто использовать return вместо die;

1 голос
/ 28 февраля 2011

Что ж, единственный приемлемый способ в вашем случае - return FALSE

, если эти функции действительно являются методами некоторого класса, используйте переменную класса для хранения фактических ошибок.если бы эти функции не принадлежали ни к одному классу, я бы вообще не использовал их, но написал бы их в виде простого кода

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

обновленный ответ

Ну, нет ничегоизобретать.Просто следуйте пути PHP:
Заставьте вашу функцию возвращать либо значение, либо ЛОЖЬ

, однако, для целей проверки вы должны сделать это так:

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

т.е. функция возвращаеттолько логические значения и фактическое сообщение об ошибке добавляются логикой приложения.

Однако в вашем примере пользовательские функции используются неправильно.

...