即使第一个参数为真,php也不会检查第二个参数

时间:2013-06-29 12:45:18

标签: php

我写了这个:

$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并且它没有'检查第二个。有谁知道为什么会这样?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

请尝试使用此代码:

$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);

答案 2 :(得分:0)

您的user和pass1函数未返回显式值,因此它们隐式返回NULL值。如this page in the PHP manual所述,当预期布尔值时,NULL类型将转换为false。因此,您的user和pass1函数每次都返回false

PHP中的&&and逻辑运算符使用短路来提高效率(请参阅this page of the PHP manual上的第一个代码示例),因此在任何and语句中使用第一个操作数求值为false,整个and语句永远不可能计算为true,所以第二个操作数(在上面的代码中,第二个操作数是调用pass1($b1))永远不会被评估,因为这样做会浪费时间。

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