PHP exit () против оператора if - else - PullRequest
2 голосов
/ 15 января 2012

Является ли это хорошей или плохой практикой для аутентификации, а затем просто завершить () функцию или обернуть весь результат аутентификации в оператор if?Пример

function foo($uid)
{

    $allowed = $auth->checkIfAllowed($uid);

    if ($allowed == false) exit();

        //continue with senstive code here

    }
}

ИЛИ

function foo($uid)
{

    $allowed = $auth->checkIfAllowed($uid);

    if ($allowed == true)
    {
        // do sensitive stuff
    } 
}

Ответы [ 4 ]

4 голосов
/ 15 января 2012

Я хотел бы воспользоваться этой возможностью, чтобы поговорить о exit; (поскольку другие заявили, что обе работы работают, вторая более явная, чем первая, и дает вам возможность отправить приятное сообщение об ошибке пользователю). Моя главная претензия (у меня есть несколько с exit;) состоит в том, что люди должны прекратить использовать его в библиотеках , то есть код, который может / будет использоваться в других проектах ... Вы знаете, как раздражает отладка те? Бросайте исключения, вызывайте фатальные ошибки, но дайте мне что-то с описанием.

/ декламация

3 голосов
/ 15 января 2012

Ваши примеры эквивалентны.

Однако конечному пользователю обычно не полезно просто внезапно завершать работу сценария.Вместо этого отправьте своему пользователю полезное сообщение об ошибке, напечатанное в HTML, а не в виде обычного текста, который вы получите, например, при вызове die().

function foo($uid)
{

  $allowed = $auth->checkIfAllowed($uid);

  if ($allowed == false)
  {
    $errormsg = "You are not allowed to view this page";
  }

  else 
  { 
    //continue with senstive code here    
  }
}

Позже напечатайте ошибку в HTML, а не простопрерывание сценария:

<div class='error'><?php echo $errormsg; ?></error>
0 голосов
/ 15 января 2012

Они абсолютно одинаковые. Отступ и стиль кодирования - единственная разница. В обоих случаях секретный код не будет выполнен, пока аутентификация не будет выполнена успешно.

Обычно лучше быть выразительным в вашем коде, поэтому я бы порекомендовал второй метод.

0 голосов
/ 15 января 2012

Либо или. Я не думаю, что это будет иметь значение. Это относительно точно то же самое. В программировании есть много способов программировать вещи, в большинстве случаев они никогда не идут по правильному пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...