全局php变量未在函数内定义

时间:2014-04-07 16:38:48

标签: php global

我的php代码如下所示:

$jsonIterator = new RecursiveIteratorIterator(new RecursiveArrayIterator(json_decode(file_get_contents("data.config"), TRUE)), RecursiveIteratorIterator::SELF_FIRST);
foreach ($jsonIterator as $key => $val) 
{

    if($key == "user")
        $user = $val;
    else if($key == "pass")
        $pass = $val;
    else if($key == "server")
        $server = $val;
    else if($key == "data")
        $data = $val;
}

if(!empty($_GET) && isset($_GET['function'])) call_user_func($_GET['function']);
if(!empty($_POST) && isset($_POST['function'])) call_user_func($_POST['function']);

function dbcon()
{
    return new mysqli($server,$user,$pass,$data);
}

但是当我打电话给dbcon()时,我得到了未定义的变量:用户等等 为什么会发生这种情况?我该如何解决?

1 个答案:

答案 0 :(得分:3)

您应该使用global关键字:

function dbcon()
{
    global $server;
    global $user; ...
    return new mysqli($server,$user,$pass,$data);
}

但你不应该使用全局变量
简单总是注入所有依赖项

function dbcon($server,$user,$pass,$data);

例如或更好:function dbcon($options);

或者最好的方法是OOP学习并编写单独的类来填充所有这些......

一些offtop。
替换这个:

if(!empty($_GET) && isset($_GET['function'])) call_user_func($_GET['function']);
if(!empty($_POST) && isset($_POST['function'])) call_user_func($_POST['function']);

跟着:

$allowed_foos = array('allowed_foo1', 'allowed_foo2');
if(
   !empty($_REQUEST) && 
   isset($_REQUEST['function']) && 
   in_array($_REQUEST['function'], $allowed_foos)
) 
  call_user_func($_REQUEST['function']);