2013-05-29 26 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操作

相关问题