1

我见过可以从函数返回字符串或布尔值的编程实践。在这种情况下,是否建议在 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;
}

?>
4

3 回答 3

4

这段代码应该可以工作(对于这个特定的例子$str),但是正如您所建议的那样,在 PHP 中检查布尔值是有风险的,并且应该谨慎进行,我建议(通常)按如下方式检查它:

if ($str !== false)
{
  echo $str;
}
于 2012-08-09T17:43:38.383 回答
2

将会发生的事情是$str类型转换为 boolean。因此,字符串将评估false为:

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

考虑所有其他值true,这可能不是您想要的行为。所以,回答你的问题:

你认为应该输出什么?

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

if中的检查是否正确?

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

于 2012-08-09T17:43:58.417 回答
2

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

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

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

于 2012-08-09T17:45:56.293 回答