使用返回 true 或 false 的函数的 PHP 最佳实践是啥?

Posted

技术标签:

【中文标题】使用返回 true 或 false 的函数的 PHP 最佳实践是啥?【英文标题】:What is the PHP best practice for using functions that return true or false?使用返回 true 或 false 的函数的 PHP 最佳实践是什么? 【发布时间】:2012-03-27 10:28:36 【问题描述】:

在玩过php后,发现返回true为1,返回false为null。

echo (5 == 5) // displays 1
echo (5 == 4) // displays nothing

在编写返回 true 或 false 的函数时,使用它们的最佳实践是什么?

例如,

function IsValidInput($input) 
  if ($input...) 
    return true;
  
  else 
    return false;
  

这是使用该功能的最佳方式吗?

if (IsValidInput($input)) 
  ...

你会如何编写相反的函数?

IsBadInput($input) 
  return ! IsValidInput($input);

您什么时候使用=== 运算符?

【问题讨论】:

您至少问了 4 个问题。你的真正问题是什么? 【参考方案1】:

玩过PHP后发现返回true为1,返回false为null。

这不是真的(不是双关语)。与许多其他语言一样,PHP 具有“真实”和“虚假”值,与其他值相比,它们的行为类似于 TRUEFALSE

之所以如此,是因为 PHP 使用弱类型(相对于 strong typing)。它在比较它们时会自动转换不同类型的值,因此它最终可以比较相同类型的两个值。当你在 PHP 中echo TRUE; 时,echo 将始终输出一个字符串。但是你给它传递了一个布尔值,在echo 可以完成它的工作之前,它必须被转换为一个字符串。所以TRUE会自动转换成字符串"1",而FALSE会转换成""

什么时候使用 === 运算符?

这种弱或松散的类型是 PHP 使用两个相等运算符 ===== 的原因。当您想确保要比较的两个值不仅“相等”(或等效),而且类型相同时,您可以使用===。在实践中:

echo 1 == TRUE; // echoes "1", because the number 1 is a truthy value
echo 1 === TRUE; // echoes "", because 1 and TRUE are not the same type (integer and boolean)

在编写返回 true 或 false 的函数时,使用它们的最佳实践是什么?

尽可能精确,返回实际的布尔值TRUEFALSE。典型的情况是以is为前缀的函数,比如isValidInput。人们通常期望这样的函数返回TRUEFALSE

另一方面,在某些情况下,让您的函数返回“虚假”或“真实”值很有用。以strpos 为例。如果在位置 0 中找到子字符串,则返回 0 (int),但如果未找到该字符串,则返回 FALSE (bool)。所以:

$text = "The book is on the table";
echo (strpos($text, "The") == FALSE) ? "Not found" : "Found"; // echoes "Not found"
echo (strpos($text, "The") === FALSE) ? "Not found" : "Found"; // echoes "Found"

【讨论】:

我认为这个问题应该得到更好的答案,所以我完全重写了我的问题。以前的版本可用here。 附加信息:"official" *** question/answer on == vs. ===【参考方案2】:
function isValidInput($input)
    return ($input ...);   // if your test returns true/false, just return that result

您的最后一个示例缺少参数,否则很好:

function isBadInput($input)
    return !isValidInput($input);

【讨论】:

谢谢。我修正了错字。是的,这个函数不是一个很好的例子,但我只是想让这个例子更明确。【参考方案3】:

    当然。除非您需要其他类型的结构,例如一个while循环。

    你永远不会。总是直接反转正常函数。

    当您需要区分false0'' 等时。

【讨论】:

【参考方案4】:

玩过PHP后发现返回true为1,返回false为null。

没有。truefalse 以布尔值 truefalse 返回。 当你回显输出时它必须被转换成一个字符串来显示。作为per the manual:

布尔值TRUE 转换为字符串"1"。布尔值 FALSE 转换为 ""(空字符串)。这允许在布尔值和字符串值之间来回转换。

至于其余部分:没关系,是的,是的,当您想要精确的类型匹配时,以避免比较中的类型杂耍,例如"1" == true 为真,但"1" === true 为假。

【讨论】:

【参考方案5】:
function isValidInput($input) 
  return ($input...);


if(isValidInput($input))
  ...

if(!isValidInput($input)) // never rewrite inverse functions
  ...

if(isValidInput($input) === false) 
  // Only run if the function returned a boolean value `false`
  // Does the same thing as above, but with strict typing.

【讨论】:

以上是关于使用返回 true 或 false 的函数的 PHP 最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

我有一个有时返回 True,有时返回 False 的函数。我如何计算真假?

如何使用IF函数及iserror函数

我想创建一个名为 VALIDATE_EMP 的函数,它接受 employeeNumber 作为参数,根据存在返回 TRUE 或 FALSE

迭代对象数组时返回 false 或 true [重复]

javascript中的 return false和return true

遍历数组元素的方法