PHP 用字符串返回 false

Posted

技术标签:

【中文标题】PHP 用字符串返回 false【英文标题】:PHP return false with a string 【发布时间】:2011-12-04 05:58:44 【问题描述】:

我正在寻找使用布尔/字符串处理返回语句的正确方法。例如,我在函数内部进行了所有检查,如果全部通过,则返回 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;
    

?>

看来这个方法行得通,但是这是好的编程礼仪吗?还是我应该这样做的另一种方式?感谢您的宝贵时间。

【问题讨论】:

您需要了解 PHP(也适用于 javascript)中的 falsy 值。 ***.com/questions/699507/… @zzzzBov 异常是昂贵的。除非您有充分的理由,否则不要抛出异常。 @NullUserExceptionఠ_ఠ,不要过早优化。是的,使用许多例外可能代价高昂。 @zzzzBov 使用异常也会丑化你的代码。如果“答案不正确”,IMO 抛出异常是 no 有意义的。异常应该用于处理不符合预期的代码 - 因此名称为“异常”。你完全认为答案是错误的。 我会知道的。毕竟,我 Exception :) 【参考方案1】:

如果 var 设置为除 true 以外的任何值,php 是否会假定为 false?

一点也不。 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()。)另一种选择是返回一个包含错误的数组,就像 Jared 建议的那样。当我预计会出现多个错误(例如:表单验证例程)时,我个人会使用此选项:

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);

【讨论】:

虽然我在过去一年中以不同的方式处理了这个问题,但在这种情况下,我可能想从函数返回一个错误数组,然后测试返回结果中它有多少个数组成员。这样,我不必维护两个不同的上下文(参数和返回值)。 @Jared 当我预计会出现多个错误(例如:表单验证器)时,我也会使用数组。【参考方案2】:

您可以使用=== 来检查返回值是否为布尔值true。 === 检查类型和值。

if ($result === true)

    echo 'Correct!';

else

    echo $result;

【讨论】:

这很好用,尽管通过引用传递变量似乎是更好的实践标准。感谢您的帮助。【参考方案3】:

我最近遇到了这个问题,我的函数要么将错误消息作为字符串返回,要么像这样返回 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;

这会检查函数的结果是否不仅仅是一个真字符串,而是一个明确的布尔真

【讨论】:

【参考方案4】:

这对于返回 true 或返回 false 作为字符串的人可能很有用。

if (is_bool($result)) 

   echo 'Result is a true bool';
 
else

   echo $result.'returning a string';

【讨论】:

以上是关于PHP 用字符串返回 false的主要内容,如果未能解决你的问题,请参考以下文章

php怎样判断一个字符串是否包含另一个字符串?

php怎样判断一个字符串是否包含另一个字符串?

php 总结

php json_encode 返回false

用什么方法来判断字符串是否存在的函数

Php fetch 返回字符串而不是布尔“真/假”值