我正在尝试创建一个Autoloader类,以便我能够自动加载所有模块。但问题是,我想从配置文件中设置全局,稍后,只需使用以下命令调用所有这些:
Autoloader::GetGlobals();
到目前为止,我有这3个文件:
的configuration.php
<?php
global $Configuration;
$Configuration['Globals'] = "Core Database Templates Directory Debugger";
?>
Autoloader.Class.php
<?php
require_once('Configuration.php');
private static $Globals = "";
private static $MakeGlobal = "global ";
public static function GetGlobals()
{
$ParsedGlobals = "";
$Globals2String = explode(" ", Autoloader::$Globals);
foreach($Globals2String as $Global)
$Globals[] = "$".$Global;
$DefinedGlobals = count($Globals);
for ($i = 0; $i < $DefinedGlobals; $i++)
{
$LastElement = $DefinedGlobals - 1;
if($i != $LastElement)
$ParsedGlobals .= $Globals[$i].", ";
else
$ParsedGlobals .= $Globals[$i].";";
}
return Autoloader::$MakeGlobal.$ParsedGlobals;
}
?>
我得到了正确的输出:
global Core, Database, Templates, Directory, Debugger;
接下来我想把它解释为PHP代码而不是字符串,我不想使用eval()
(因为我读了很多文章这说明这是最后一个使用的功能。)
所以问题是,是否可以将return
的字符串作为PHP代码运行,只需将其称为Autoloader::GetGlobals();
?
答案 0 :(得分:1)
它几乎和使用eval()一样糟糕,但有变量变量,如果你选择走这条疯狂和混乱的道路:
function foo($arg) {
global $$arg; // note the $$
echo "$arg / $$arg";
}
$a = 'bar';
foo('a');
输出:
a / bar