返回字符串并将其作为代码运行


Return string and run it as code

我正在尝试创建一个自动加载器类,这样我就可以自动加载所有模块。但问题是,我想从配置文件中设置一个全局变量,然后通过使用:

调用所有的全局变量
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