5

玩过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

5 回答 5

4

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

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

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

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

这种弱或松散的类型是 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(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"
于 2012-03-10T01:26:58.860 回答
2
function isValidInput($input){
    return ($input ...);   // if your test returns true/false, just return that result
}

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

function isBadInput($input){
    return !isValidInput($input);
}
于 2012-03-10T01:21:58.307 回答
1
  1. 当然。除非你需要它在不同类型的结构中,例如 while 循环。

  2. 你永远不会。始终直接反转正常功能。

  3. 当您需要区分false,0''

于 2012-03-10T01:20:38.330 回答
1

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

否..truefalse返回为布尔值truefalse当您回显输出时,必须将其转换为字符串以进行显示。根据手册

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

至于其余的:很好,是的,是的,当你想要精确的类型匹配时,以避免在比较中类型杂耍,例如"1" == true是真的但是"1" === true假的。

于 2012-03-10T01:24:02.753 回答
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.
}
于 2012-03-10T01:26:06.107 回答