1

我写了这个:

$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(),每次我这样做时,第一个参数都返回为真,它没有检查第二个参数。有谁知道为什么会这样?

4

3 回答 3

3

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

于 2013-06-29T12:48:31.170 回答
0

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

PHP 中的&&andand逻辑运算符使用短路来提高效率(请参阅PHP 手册本页上的第一个代码示例),因此在任何and第一个操作数计算为它的语句中,整个语句false都不可能计算为,因此第二个操作数(在您上面的代码的情况下,第二个操作数是对 的调用)永远不会被评估,因为这样做会浪费时间。andtruepass1($b1)

这意味着您看到的是用户函数被调用,而不是 pass1 函数。

于 2013-06-29T12:58:35.033 回答
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);
于 2013-06-29T12:51:17.807 回答