我写了这个:
$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并且它没有'检查第二个。有谁知道为什么会这样?
答案 0 :(得分:3)
user
和pass1
函数应该返回true
或false
,而不是回显。
答案 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函数。