2014-09-01 95 views
3

这可能是一个愚蠢的问题,但我被困在这个愚蠢的问题部分2小时。

我有这个功能,它检查一个特定的配置文件的变量是不是空的。 这里的功能: -

include 'inc.config.php'; 
function not_valid_settings() 
{ 
    if((empty($_GLOBAL['id'])) || (empty($_GLOBAL['username'])) || empty($_GLOBAL['password'])) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

这里的配置inc.config.php文件:

$_GLOBAL=array(); 
$_GLOBAL['id'] = "asas"; 
$_GLOBAL['username'] = "asas"; 
$_GLOBAL['password'] = 'as'; 

函数调用

include 'inc/inc.functions.php'; 
if(not_valid_settings()) 
{ 
    echo "Please enter correct entries in inc/inc.config.php"; 
    exit(); 
} 

出于某种原因,我总是得到请输入正确的细节。即使我的$_GLOBAL['username']='';。 我在这里做什么错?

+0

我不认为'$ _GLOBAL'做你认为它做的,你是否可能意思是'$ GLOBALS'? (但是你真的不应该使用) – cdhowie 2014-09-01 20:26:48

+0

是的,我实际上使用'$ _GLOBAL'作为所有全局设置变量的变量。 – user2619381 2014-09-01 20:27:36

+0

FWIW:在暴露helper函数的文件中不要包含“config”(它应该在调用上下文中由全局mangling设置) – user2864740 2014-09-01 20:28:36

回答

1

的问题是,$_GLOBAL似乎是一个PHP超全局,但它不是 - PHP中没有这样的超级全局。因此,这个变量并不是随处可见的。如果添加global $_GLOBAL;仿佛你的函数的第一行,你的代码应工作:

function not_valid_settings() 
{ 
    global $_GLOBAL; 

也许你想用$GLOBALS代替,但我会强烈建议不要它。改为使用$SETTINGS这样的名称,并且不要忘记在需要访问设置对象的函数中使用global $SETTINGS;

一般而言,您应该避免选择以$_开头的变量名称,除非它们是PHP超全球变量;这个前缀意味着一个超全局的,而你的变量不是。这会造成不必要的混淆。

+0

谢谢,我知道可变范围的概念。但不知道我的思想不在这里。 再次感谢。 – user2619381 2014-09-01 20:45:03