производительность — массив или функция PHP — что более эффективно в этом сценарии

Использование 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 () будут считываться только при вызове функции, что, я считаю, будет более эффективным, но я могу ошибаться. Другие истинные / ложные или простые текстовые значения не кажутся, что они будут большим выигрышем в эффективности, но я представляю это здесь — любые научные или основанные на фактах рассуждения о том, почему один путь был бы более эффективным, чем другой?

Благодарю.

1

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector