2012-06-08 141 views
3

我正在編寫一個MVC框架(出於學習和發現的目的而不是實際打算使用它),並且遇到了一個小問題。來自所需/包含文件的PHP中的變量變量

我有一個config.php文件:

$route['default'] = 'home'; 

$db['host'] = 'localhost'; 
$db['name'] = 'db-name'; 
$db['user'] = 'user-name'; 
$db['pass'] = 'user-pass'; 

$enc_key = 'enc_key' 

我通過一個靜態方法在我boot類加載這些:

public static function getConfig($type) { 
    /** 
    * static getConfig method gets configuration data from the config file 
    * 
    * @param string $type - variable to return from the config file. 
    * @return string|bool|array - the specified element from the config file, or FALSE on failure 
    */ 
    if (require_once \BASE . 'config.php') { 
     if (isset(${$type})) { 
      return ${$type}; 
     } else { 
      throw new \Exception("Variable '{$type}' is undefined in " . \BASE . "config.php"); 
      return FALSE; 
     } 
    } else { 
     throw new \Exception("Can not load config file at: " . \BASE . 'config.php'); 
     return FALSE; 
    } 
} 

,然後加載像這樣的路線:

public function routeURI($uri) { 
    ... 
    $route = $this::getConfig('route'); 
    ... 
} 

哪一個例外:

"Variable 'route' is undefined in skeleton/config.php" 

現在,它工作正常,如果我讓config.php文件像這樣

$config['route']['default'] = 'home' 
... 

並更改兩條線的方法,像這樣:

if (isset($config[$type])) { 
     return $config[$type]; 

我一直在使用$$type代替也嘗試${$type}與同樣的問題。

有什麼我可以忽略的嗎?

回答

1

正如所寫的,這個函數只能被調用一次,因爲它使用了require_once,並且在隨後的調用中,您將不會再引入config.php中定義的局部變量。我懷疑您在第二次致電getConfig()時遇到此錯誤。

+0

我糾正了,我把它改爲'require',它工作,對不起! –

+0

好吧馬克這個人回答正確!另外,添加不需要該函數中的文件。要求在函數之外,並將配置作爲參數傳遞。 – Galen

+0

我最初需要index.php頁面中的文件,我不知道爲什麼我還是不這樣做,我想我只是在嘗試新事物! –