PHP 不会检查第二个参数,即使第一个参数为 true


php wont check the second argument even if the first is true

我写了这个:

$a[] = "guy";
$b[] = "g";
function login($a1, $b1)
{
  if( user($a1) == true and pass1($b1) == true)
  {
    login2($a1, $b1);
  }
  else
  { 
    echo "error!!!!";
  }
}
function login2($a1, $b1)
{
  if (array_search($_REQUEST["user"],$a1) == array_search($_REQUEST["pass"],$b1))
  {
    echo "you are logged in";
  }
  else
  {
    echo "erorr";
  }
}
function user($user1)
{   
  if(in_array($_REQUEST["user"],$user1))
  {
    echo "gooooooood?";
  }
}
function pass1($pas)
{
  if(in_array($_REQUEST["pass"],$pas))
  {
    echo "goooooooood!!!!!!!!";
  }
  else
  {
    echo "bad";
  }
}
login($a, $b);      

我知道pass()user()是正确的,因为我改变了它们在函数login()上的位置,每次我这样做时,第一个参数都返回为 true,它没有检查第二个参数。有谁知道为什么会这样?

userpass1函数应该返回truefalse,而不是回显出来。

您的用户和 pass1 函数没有返回显式值,因此它们隐式返回 NULL 值。如 PHP 手册中的本页所述,当需要布尔值时,NULL 类型将转换为 false。因此,您的用户和 pass1 函数每次都返回false

PHP

中的&&and逻辑运算符使用短路来提高效率(请参阅 PHP 手册此页面上的第一个代码示例(,因此在任何第一个操作数计算为 falseand 语句中,整个 and 语句的计算结果永远不可能为 true ,因此第二个操作数(在上面的代码中, 第二个操作数是调用 pass1($b1) ( 永远不会被计算,因为这样做会浪费时间。

这意味着您看到的是正在调用的用户函数,但从未看到 pass1 函数。

尝试改用这个:

$a[] = "guy";
$b[] = "g";
function login($a1, $b1)
{
    if( user($a1) == true && pass1($b1) == true)
        login2($a1, $b1);
    else 
    echo "error!!!!";
}
function login2($a1, $b1)
{
    if (array_search($_REQUEST["user"],$a1) == array_search($_REQUEST["pass"],$b1))
        echo "you are logged in";
    else
        echo "erorr";
}
function user($user1)
{
    if(in_array($_REQUEST["user"],$user1))
        echo "gooooooood?";
}

function pass1($pas)
{
    if(in_array($_REQUEST["pass"],$pas))
        echo"goooooooood!!!!!!!!";
    else
        echo "bad";
}
login($a, $b);