PHP用字符串返回false

Ed *_*d R 6 php string boolean return

我正在寻找使用bool/string处理return语句的正确方法.例如,我在函数内部进行所有检查,如果全部通过则返回true.但是,如果出现问题,我想返回一个错误的字符串,而不是返回false; 用一般字符串.如果将var设置为除true之外的任何内容,php是否会假设为false?处理这个问题的正确方法是什么?这是我正在做的一个例子

<?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;
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

看来这种方法有效,但这是一个很好的编程礼仪吗?或者我还有另一种方法吗?感谢您的时间.

Nul*_*ion 12

如果将var设置为除true之外的任何内容,php是否会假设为false?

一点也不.PHP将返回设置变量的任何内容.实际上,因为你有一个非空字符串,这是一个"truthy"值(即:true在布尔上下文中).由于您用作if ($result)检查并返回"truthy"值,因此条件始终为真.您需要将该检查更改为:

if ($result === true) {
    ...
Run Code Online (Sandbox Code Playgroud)

处理这个问题的正确方法是什么?

我认为这是一个很好的方法来处理它.另一种方法是通过引用传递错误字符串变量,并让代码的失败部分填充,例如:

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

一些本机PHP函数的行为与此类似(例如:exec().)另一种替代方法是返回带有错误的数组,就像Jared建议的那样.我个人在使用此选项时会遇到多个错误(例如:表单验证例程):

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

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

    return $errors;
}
Run Code Online (Sandbox Code Playgroud)

现在你也可以利用空数组是假的这个事实:

$errors = check_stuff($your_stuff);
if (!$errors) {
    echo 'No errors!';
} else {
    print_r($errors);
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*ngh 6

您可以使用===检查返回值是否为布尔值true.===检查类型以及值.

if ($result === true)
{
    echo 'Correct!';
}
else
{
    echo $result;
}
Run Code Online (Sandbox Code Playgroud)