PHP - 检查if语句中的返回值

时间:2012-08-09 17:40:30

标签: php

我见过编程实践,可以从函数返回字符串或布尔值。在这种情况下,是否建议在if循环中检查empty()和isset(),或者只检查if($ returnvar)是否有效。

这是我正在玩的一段代码。您认为输出是什么,if条件下的检查是否正确?

谢谢,

<?php

function testMe()
{
 try
 {
  $returnText = 'John King Rocks';
  return $returnText;
 }
 catch (Exception $e)
 {
  return false;
 }
}

$str = testMe();
if ($str)
{
  echo $str;
}

?>

3 个答案:

答案 0 :(得分:4)

此代码应该有效(对于$str的这个特定示例),但是如你所建议的那样在PHP中检查布尔是有风险的,并且应该谨慎行事,我建议(一般)检查它如下:

if ($str !== false)
{
  echo $str;
}

答案 1 :(得分:2)

$strtype casted to a boolean将会发生什么。因此,字符串将在false时评估为:

  1. 空字符串
  2. 字符串“0”
  3. 其他所有值都被视为true,这可能不是您想要的行为。所以,回答你的问题:

      

    您认为输出应该是什么?

    好吧,返回字符串与这两个条件中的任何一个都不匹配,因此if语句将评估为true,而$str将为echo()'d 。 (更不用说上面的代码永远不会产生异常)。

      

    if?

    中的检查是否正确

    这取决于您正在寻找的功能。如果要将所有字符串(包括“”和“0”)视为有效,并且仅在函数返回echo()时跳过false,则应检查返回值是否与!== false。否则,如果上述两个条件可以接受为false,那么你应该没问题。

答案 2 :(得分:2)

if不是循环。这是有条件的。 echo false将被强制转移到echo '0',因此只有在您不想打印零时才需要if检查。但是,echo null根本不会打印任何内容。更好的是返回空字符串。你应该避免混合返回类型。许多其他语言甚至不允许它。

顺便说一句,你的异常处理什么都不做.. try的内容不能抛出异常。吞咽异常也很糟糕,您需要在$之前e

在回答你的问题时,有一句话“偏执编程就是专业编程”。也就是说,如果您希望应用程序一致地工作(并且if检查在这种情况下是好的),您应该尽可能多地进行检查,但同样重要的是要知道您正在使用哪些方法和预期结果。如果testMe为假,您是否需要其他处理?或者你想不打印任何东西?