2014-06-09 49 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 
相關問題