Проблема с возвратом массива из включенного файла для конфигурации
Я пытаюсь сделать простой класс конфигурации для чтения массивов из файлов конфигурации. Где вы включаете файл, который имеет возвращаемое содержимое 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 ответ
Вы должны просто сделать переменную кэша класса.. как:
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
}
поэтому вы никогда не будете пытаться сканировать этот каталог снова, если вы уже загрузили конфигурационный файл... он хорош для производительности... и производительность должна быть высокой для таких вещей, как получение конфигурации.