我写了这个:
$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,它没有检查第二个参数。有谁知道为什么会这样?
user
和pass1
函数应该返回true
或false
,而不是回显出来。
您的用户和 pass1 函数没有返回显式值,因此它们隐式返回 NULL 值。如 PHP 手册中的本页所述,当需要布尔值时,NULL
类型将转换为 false
。因此,您的用户和 pass1 函数每次都返回false
。
中的&&
和and
逻辑运算符使用短路来提高效率(请参阅 PHP 手册此页面上的第一个代码示例(,因此在任何第一个操作数计算为 false
的 and
语句中,整个 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);