Использование PHP 5.6 и будет переход на 7.0 в течение следующих 12-18 месяцев для этого конкретного приложения.
Таким образом, у нас есть довольно большой глобальный конфигурационный файл, который в настоящее время содержит около 100 переменных (и каждое обновление получает больше). Как и следовало ожидать, этот файл конфигурации вызывается каждой страницей скрипта в приложении, но не все значения конфигурации используются во всех случаях — но для удобства мы разместим их все в одном файле.
Но я думал, что, возможно, размещение значений в функциях будет более эффективным, но, поскольку я не являюсь архитектором языка PHP (или любого другого языка), я не знаю, является ли использование функций более эффективным, менее эффективным или привлекательным большой разницы нет.
Итак, вот пример сценария. В нашем конфигурационном файле у нас есть что-то вроде этого:
$g['user']['enable_username_change'] = true;
$g['user']['enable_image_change'] = true;
$g['user']['display'] = "[LASTNAME], [FIRSTNAME]";
$g['user']['sort_by'] = "[LASTNAME]";
$g['user']['default_locale'] = "english";
$g['user']['profile_page'] = file_get_contents('profile_template.html');
Эти значения доступны для всех сценариев, но только некоторые из них нуждаются в них. Очевидно, что мы получаем к ним доступ, просто делая что-то вроде этого:
if ( $g['user']['enable_username_change'] == true ) {
// the code to enable it ...
}
Так что я думал об изменении способа, которым это работает (если это создаст большую эффективность), делая что-то вроде этого:
function user__getGlobalConfig( $in_param_name ) {
// DEFINE THE VALUES
$g['user']['enable_username_change'] = true;
$g['user']['enable_image_change'] = true;
$g['user']['display'] = "[LASTNAME], [FIRSTNAME]";
$g['user']['sort_by'] = "[LASTNAME]";
$g['user']['default_locale'] = "english";
$g['user']['profile_page'] = file_get_contents('profile_template.html');
if ( isset( $g['user'][$in_param_name] == true ) {
return $g['user'][$in_param_name];
} else {
return false;
}
}
Тогда мы бы получили к нему доступ так:
if ( user__getGlobalConfig('enable_username_change') == true ) {
// the code to enable it ...
}
Поэтому может показаться, что значения типа file_get_contents () будут считываться только при вызове функции, что, я считаю, будет более эффективным, но я могу ошибаться. Другие истинные / ложные или простые текстовые значения не кажутся, что они будут большим выигрышем в эффективности, но я представляю это здесь — любые научные или основанные на фактах рассуждения о том, почему один путь был бы более эффективным, чем другой?
Благодарю.
Если вы используете функциональный подход, вы должны закодировать его, чтобы он не воссоздает массив каждый раз, используя статическую переменную для кэширования настроек. В частности, вы не хотите, чтобы он звонил file_get_contents()
каждый раз, когда вы ищите настройки.
function user__getGlobalConfig( $in_param_name ) {
static $g;
if (!isset($g)) {
$g = array();
// DEFINE THE VALUES
$g['user']['enable_username_change'] = true;
$g['user']['enable_image_change'] = true;
$g['user']['display'] = "[LASTNAME], [FIRSTNAME]";
$g['user']['sort_by'] = "[LASTNAME]";
$g['user']['default_locale'] = "english";
$g['user']['profile_page'] = file_get_contents('profile_template.html');
}
if ( isset( $g['user'][$in_param_name] ) ){
return $g['user'][$in_param_name];
} else {
return false;
}
}
Других решений пока нет …