我见过编程实践,可以从函数返回字符串或布尔值。在这种情况下,是否建议在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;
}
?>
答案 0 :(得分:4)
此代码应该有效(对于$str
的这个特定示例),但是如你所建议的那样在PHP中检查布尔是有风险的,并且应该谨慎行事,我建议(一般)检查它如下:
if ($str !== false)
{
echo $str;
}
答案 1 :(得分:2)
$str
将type casted to a boolean将会发生什么。因此,字符串将在false
时评估为:
其他所有值都被视为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
为假,您是否需要其他处理?或者你想不打印任何东西?