使用返回 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 具有“真实”和“虚假”值,与其他值相比,它们的行为类似于 TRUE
或 FALSE
。
之所以如此,是因为 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 的函数时,使用它们的最佳实践是什么?
尽可能精确,返回实际的布尔值TRUE
或FALSE
。典型的情况是以is
为前缀的函数,比如isValidInput
。人们通常期望这样的函数返回TRUE
或FALSE
。
另一方面,在某些情况下,让您的函数返回“虚假”或“真实”值很有用。以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循环。
你永远不会。总是直接反转正常函数。
当您需要区分false
和0
、''
等时。
【讨论】:
【参考方案4】:玩过PHP后发现返回true为1,返回false为null。
没有。true
和 false
以布尔值 true
和 false
返回。 当你回显输出时它必须被转换成一个字符串来显示。作为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 的函数。我如何计算真假?
我想创建一个名为 VALIDATE_EMP 的函数,它接受 employeeNumber 作为参数,根据存在返回 TRUE 或 FALSE