2014-06-09 31 views
0

我试图创建一个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

你这是什么意思就是,“作为PHP代码”?一个字符串是一种PHP代码,你是否想要将其转换为数组? – Dan

+0

我认为他想将它注入到脚本中,并将它解释为php而不是作为变量,但作为关键字 –

+0

所以我想在php中完全按照全局变量运行它,但不是简单的字符串 –

回答

1

这几乎就像使用eval()那样糟糕,但有可变的变量,如果你选择走下来的疯狂和混乱的路径:

function foo($arg) { 
    global $$arg; // note the $$ 
    echo "$arg/$$arg"; 
} 

$a = 'bar'; 
foo('a'); 

输出:

a/bar 
相关问题