2013-05-29 94 views
0

我已閱讀了很多關於此的信息,發現了一些很好的答案並解決了我的問題。但我仍然不明白爲什麼。

_check.php是很多的支票後,包括每個頁面上查一些東西,如果有人在loggen包括 (IF/ELSEIF /其他),它與結尾:

{$chklogin = 'yes'} else {$chklogin = 'no';} 

當我顯示此字符串($ chklogin)在一個頁面上,它完美的工作......任何缺少檢查和$ chklogin顯示沒有。只有當所有檢查都可以時,它纔會顯示是。 當我把這個字符串的函數...

function login() { 
if($chklogin == 'yes') {return 'J';} else {return 'N';}} 

$chklogin仍然是,調用該函數返回login()N。 我通過將$chklogin$_SESSION解決了這個問題...

function login() { 
if($_SESSION['chklogin'] == 'yes') {return 'J';} else {return 'N';}} 

現在都$chklogin$_SESSION['chklogin']有同樣的結果。

有人可以告訴我爲什麼第一個功能不起作用($chklogin),我真的很想明白我做錯了什麼。

編輯:thanx很多傢伙,我仍然不完全明白,但你已經發送了我正確的學習路徑。已經閱讀了更多關於全局變量並將其作爲參數傳遞的信息。 Ithink我的問題得到解答,再次感謝!

+2

請與編程語言 – Patashu

+2

標記您的問題請閱讀'變量scope' - HTTP://www.php。 net/manual/en/language.variables.scope.php –

回答

1

它與範圍界定有關。裏面的功能,$chklogin當地變量,它是唯一可見功能,恰好具有相同的名稱作爲全球變量$chklogin

試試這個:

function login() 
{ 
    global $chklogin; # use the global variable instead of a local one 
    if($_SESSION['chklogin'] == 'yes') 
    { 
     return 'J'; 
    } 
    else 
    { 
     return 'N'; 
    } 
} 
+4

請不要'全球'....爲什麼不建議將該值作爲參數傳遞給函數? –

+0

,因爲我試圖回答OP的問題。好點,但。現在OP可以去查找最佳實踐來避免「全球化」。 –

0
$variable = ($_SESSION['chklogin'] == 'yes') ? 'J' : 'N'; 

您可以使用TURNARY操作

相關問題