2015-04-15 49 views
1

我想做一個簡單的配置類從配置文件讀取數組。 包含返回array()內容的文件的位置。很簡單。從包含文件返回數組的配置問題

我想我會擴展它有點使用點符號與第一個元素是文件名。但是,如果您嘗試兩次訪問同一文件中的數據,它會再次嘗試包含該文件,但這不起作用。

public static function get($path=null,$ext='php'){ 
    if(!$path)return false; 

    $path = explode('.',$path); 
    $file = $path[0] . '.' . $ext; 

    //remove file name. 
    unset($path[0]); 

    $files = scandir(CONFIG); 

    if(in_array($file,$files)){ 

     $data = include_once(CONFIG.$file); 

     foreach($path as $element){ 

      if(isset($data[$element])){ 

       $data = $data[$element]; 

      } 
     } 

     return $data; 

    } else { 

     return false; 

    } 

} 

只要您再也不需要該文件中的任何其他內容,就可以很好地工作。這裏有一個簡單的解決辦法,還是我完全溼?

+1

如果用'include'替換'include_once',則可以多次使用該文件。 – jeromegamez

+0

WTH。我嘗試了幾次無濟於事,但現在突然它有效...... ??隨你。感謝那。 –

回答

0

你應該只讓三級緩存變量..喜歡:

public static $configData = array(); 

然後在函數調用,首先,檢查是否配置文件被configData已經加載。所以,在函數調用,檢查

if (!isset(self::$configData[$filename])) { 
    ...load not loaded file and get some $configurationFromFile array.. 
    self::$configData[$filename] = $configurationFromFile 
} 

然後,如果一切都加載

if (isset(self::$configData[$filename][$key]) { 
    return self::$configData[$filename][$key]; 
} else { 
    return false 
} 

所以你永遠不會嘗試掃描該目錄中再次,如果你已經加載配置文件..其性能良好的檢查後。 。配置獲取等性能必須很高。