Статическая переменная для оптимизации

Я задаюсь вопросом, могу ли я использовать статическую переменную для оптимизации:

public function Bar() {
    static $i = moderatelyExpensiveFunctionCall();
    if ($i) {
        return something();
    } else {
        return somethingElse();
    }
}

Я знаю что однажды $i инициализируется, это не будет изменено той строкой кода на последовательных вызовах к Bar(). Я предполагаю, что это означает это moderatelyExpensiveFunctionCall() не будет оценен каждый раз, когда я звоню, но я хотел бы знать наверняка.

После того как PHP видит статическую переменную, которая была инициализирована, она перескакивает через ту строку кода? Другими словами, эта попытка оптимизировать мое время выполнения, если я выполняю много вызовов к Bar(), или я трачу впустую свое время?

12
задан keithjgrant 18 March 2010 в 21:49
поделиться

3 ответа

Мне проще сделать что-то вроде приведенного ниже кода. Таким образом, кеширование выполняется глобально, а не для каждой реализации функции.

function moderatelyExpensiveFunctionCall()
{
   static $output = NULL;
   if( is_null( $output ) ) {
     //set $output
   }
   return $output;
}
17
ответ дан 2 December 2019 в 18:52
поделиться

static $ i = blah () не будет компилироваться, потому что php не разрешает выражения и вызовы функций в статических инициализаторах. Вам нужно что-то вроде

function foo() {
   static $cache = null;

   if(is_null($cache)) $cache = expensive_func();

   do something with $cache
}
2
ответ дан 2 December 2019 в 18:52
поделиться

Как насчет:

if (!isset($i))
{
    static $i = moderatelyExpensiveFunctionCall();
}
-2
ответ дан 2 December 2019 в 18:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: