PHP возвращает false со строкой - PullRequest
6 голосов
/ 10 октября 2011

Я ищу правильный способ обработки оператора возврата с помощью bool / string. Например, я делаю все проверки внутри функции и возвращаю true, если все прошло. Однако, если что-то пошло не так, я хотел бы вернуть строку с ошибкой, а не просто вернуть false; с общей строкой. Принимает ли php значение false, если для переменной var установлено что-либо, кроме true? Как правильно справиться с этим? Вот пример того, что я делаю

<?php
$a = 2;

$result = CheckVar($a);
if ($result)
{
    echo 'Correct!';
}
else
{
    echo $result;
}

function CheckVar($var)
{
    if ($var == 1)
    {
        return true;
    }
    else
    {
        return 'This is not the correct answer. You supplied '.$var;
    }
}
?>

Кажется, что этот метод работает, но разве это хороший этикет программирования? Или есть другой способ, которым я должен делать это? Спасибо за ваше время.

Ответы [ 4 ]

12 голосов
/ 10 октября 2011

Предполагает ли php значение false, если для переменной var установлено что-то кроме true?

Совсем нет.PHP вернет любую переменную, которая была установлена.И фактически, поскольку у вас есть непустая строка, это «истинное» значение (т. Е. true в логическом контексте).Поскольку вы использовали if ($result) в качестве чека и возвращаете «истинное» значение, условие всегда выполняется.Вам нужно изменить этот чек на:

if ($result === true) {
    ...

Как правильно справиться с этим?

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

function check($var, &$error) {
    if ($var == 1) {
        return true;
    } else {
        $error = 'This is not the correct answer. You supplied ' . $var;
        return false;
    }
}

Некоторые встроенные функции PHP ведут себя так (например: exec().) Еще одна альтернатива - вернуть массив с ошибками, как предложил Джаред.Я лично использую эту опцию, когда ожидаю несколько ошибок (например, подпрограмма проверки формы):

function check_stuff($stuff) {
    $errors = array();
    if (!$condition1) {
        $errors[] = 'Condition 1 failed';
    }

    if (!$condition2) {
        $errors[] = 'Condition 2 failed';
    }

    return $errors;
}

Теперь вы также можете воспользоваться тем, что пустые массивы являются ложными:

$errors = check_stuff($your_stuff);
if (!$errors) {
    echo 'No errors!';
} else {
    print_r($errors);
}
6 голосов
/ 10 октября 2011

Вы можете использовать ===, чтобы проверить, является ли возвращаемое значение логическим значением true. === также проверяет тип и значение.

if ($result === true)
{
    echo 'Correct!';
}
else
{
    echo $result;
}
0 голосов
/ 25 сентября 2018

Это может быть полезно для тех, кто возвращает true или возвращает false в виде строки.

if (is_bool($result)) 
{
   echo 'Result is a true bool';
} 
else
{
   echo $result.'returning a string';
}
0 голосов
/ 13 августа 2012

Недавно я сталкивался с этим, моя функция либо возвращала бы сообщение об ошибке в виде строки, либо возвращала бы значение true так:

function check_something(){
    if(condition){
        return 'error message';
    }
    // if we got this far all is good!
    return true;
}

Я бы вызвал его и проверил результат следующим образом:

$var = check_something();

if($var !== true){
    // $var is not boolean true, so it must be a string
    echo $var;
}

Это проверяет, что результатом функции является не просто верная строка, а явное логическое значение

...