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

问题描述:

我已经看到编程实践中可以从函数返回字符串或布尔值。在这种情况下,是否建议在if循环中检查empty()和isset(),或者只是进行检查,如($ returnvar)是否工作。PHP - 检查if语句中的返回值

这是我正在玩的一段代码。你认为应该是输出,并且检查条件是否正确?

感谢,

<?php 

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

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

?> 
+0

请注意,'返回false;'这里是无法访问的 - 'try'块中的任何内容都不会导致异常 – cHao 2012-08-09 17:46:51

+0

true ..但它只是一个例子,因为代码到达那里.. – Jake 2012-08-09 17:49:06

+0

empty()可能炸毁你 - 它认为''0'是空的,除非你确切地知道你将要做什么,否则不要使用它 – 2012-08-09 17:50:12

此代码,就可以(为$str这个具体的例子),但在PHP检查布尔是有风险的,如你所说的,应该谨慎进行,我会建议(一般),以检查它,如下所示:

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

会发生什么事是$strtype casted to a boolean。因此,该字符串将计算为false当它是:

  1. 空字符串
  2. 字符串“0”

所有其它值都被认为是true,这可能不是你想要的行为。所以,回答你的问题:

你认为应该是输出?

好了,返回的字符串不匹配或者两个条件,所以if声明将评估为true$strecho()“d。 (更不用说上面的代码永远不会产生一个异常)。

检查是否正确的if?

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

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

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

在回答你的问题时,有一句话是“偏执编程是专业编程。“也就是说,如果您希望应用程序始终如一地运行(在此情况下if检查很好),则应该尽可能多地执行检查,但了解您正在使用的方法和预期结果也很重要。如果testMe为false,或者你想不打印任何东西,你想要其他的处理吗?或者你想不打印任何东西?

+0

如果它是假的,我不希望它在语义上打印任何东西 – Jake 2012-08-09 17:48:02

+1

,它不是一个循环,但从概念上讲,它可能是b e考虑了运行0或1次的“循环”。 – cHao 2012-08-09 17:48:21

+0

@cHao我不同意。循环需要能够运行无限次数。 – 2012-08-09 17:59:44