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的主要内容,如果未能解决你的问题,请参考以下文章