我正在尝试创建一个自动加载器类,这样我就可以自动加载所有模块。但问题是,我想从配置文件中设置一个全局变量,然后通过使用:
调用所有的全局变量Autoloader::GetGlobals();
到目前为止,我有三个文件:
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();
?
这几乎和使用eval()一样糟糕,但是如果您选择沿着这条疯狂和混乱的道路前进,可以使用可变变量:
function foo($arg) {
global $$arg; // note the $$
echo "$arg / $$arg";
}
$a = 'bar';
foo('a');
输出:a / bar