解释非常奇怪的php函数返回


Explanation for very odd php function return

所以我过去的代码需要一个变量来运行两个函数,然后返回这样的值。

 function 1($variable) {
    check($variable);
    return $variable // either a -1, -2 or true;
 }
 // pass the return to next function
function 2($variable) {
    check($variable);
    return $variable // either a -1, -2 or true;
}

在下一次检查时,它向用户返回如下消息:

  if($variable == -1) // display message
  if($variable == -2) // display message
  if($variable == true) // display message

现在,根据工作要求,变量必须经过第三次函数检查,仍然返回-1,-2或true,然后进入最后的if语句进行显示。这就是奇怪的地方。如果我保持它在两个函数If语句工作,但是如果我运行它通过第三个检查函数我需要格式化我的If是这样的,以便正确检查返回:

if($variable === -1) // display message
if($variable === -2) // display message
if($variable === true) // display message

注意我必须添加第三个'='符号。我就是不明白为什么会这样。这是我不知道的PHP规则,还是有bug?

这不是奇怪的行为,这是非常自然的PHP。

以下表达式:

if ($variable == true) {
}

表示PHP将左操作数强制转换为不那么自命的类型(在本例中为BOOLEAN),并在此之后进行比较。如果$variable值不为0或FALSE或NULL或"

",则显然会导致TRUE

在第二种情况即===中,对两个操作数的值和类型进行严格的检查。

三重等号(===)只有在比较的两个对象相同(具有相同的类型和值)时才返回true,而不仅仅是相等。

例如:

$a = 1;
$b = "1";
echo $a == $b;  // True
echo $a === $b; // False

您的代码没有显示如何调用函数和存储返回,可能有问题。另外,我想你调用函数1和2只是为了说明,因为你知道你不能用数字开始函数的名字。

===是"完全相等"(值和类型)。通常用于逻辑测试,因为有时需要区分0和false以及1和true。