我的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()
时,我得到了未定义的变量:用户等等
为什么会发生这种情况?我该如何解决?
答案 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']);