2013-06-29 57 views
1

我寫了這個: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);  

,我知道,因爲我改變了對功能login()每次我做了這一次他們的位置pass()user()是真實的第一個參數被返回爲true,並沒有檢查第二個參數。有誰知道爲什麼發生這種情況?

回答

0

您的用戶和PASS1功能不返回一個明確的值,所以它們被隱返回NULL值。如this page in the PHP manual所述,NULL類型在預計布爾值時轉換爲false。因此,您的用戶和pass1函數每次都會返回false

&&和PHP and邏輯運算符使用短路的效率(見this page of the PHP manual第一個代碼示例),以便在任何and語句,它的第一個操作數的計算結果爲false它永遠不可能對整個and語句來計算到true,所以第二個操作數(在上面的代碼的情況下,第二個操作數是調用pass1($b1))永遠不會被評估,因爲這樣做會浪費時間。

這意味着你正在看到用戶函數被調用,但從來沒有pass1函數。

3

userpass1函數應返回truefalse,不回顯。

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); 
相關問題