在玩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);
}
您何时会使用===
运营商?
答案 0 :(得分:4)
在玩PHP之后,我发现true返回1,false返回null。
这不是真的(没有双关语意)。与许多其他语言一样,PHP具有“truthy”和“falsy”值,与其他值相比,其行为类似于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
(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"
答案 1 :(得分:2)
function isValidInput($input){
return ($input ...); // if your test returns true/false, just return that result
}
你的最后一个例子是缺少一个参数,否则很好:
function isBadInput($input){
return !isValidInput($input);
}
答案 2 :(得分:1)
不确定。除非你需要一种不同的结构,例如一段时间循环。
你永远不会。始终直接反转正常功能。
当您需要将false
与0
,''
等区分开来时
答案 3 :(得分:1)
在玩PHP之后,我发现true返回1,false返回null。
否.. true
和false
以布尔true
和false
的形式返回。 当您回显输出时,必须将其强制转换为字符串以供显示。正如per the manual:
布尔值
TRUE
转换为字符串"1"
。布尔FALSE
转换为""
(空字符串)。这允许在布尔值和字符串值之间来回转换。
至于其余的:那很好,是的,是的,当你想要精确的类型匹配时,避免在比较中类型杂耍,例如: "1" == true
为真,但"1" === true
为假。
答案 4 :(得分:0)
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.
}