Я задаюсь вопросом, могу ли я использовать статическую переменную для оптимизации:
public function Bar() {
static $i = moderatelyExpensiveFunctionCall();
if ($i) {
return something();
} else {
return somethingElse();
}
}
Я знаю что однажды $i
инициализируется, это не будет изменено той строкой кода на последовательных вызовах к Bar()
. Я предполагаю, что это означает это moderatelyExpensiveFunctionCall()
не будет оценен каждый раз, когда я звоню, но я хотел бы знать наверняка.
После того как PHP видит статическую переменную, которая была инициализирована, она перескакивает через ту строку кода? Другими словами, эта попытка оптимизировать мое время выполнения, если я выполняю много вызовов к Bar()
, или я трачу впустую свое время?
Мне проще сделать что-то вроде приведенного ниже кода. Таким образом, кеширование выполняется глобально, а не для каждой реализации функции.
function moderatelyExpensiveFunctionCall()
{
static $output = NULL;
if( is_null( $output ) ) {
//set $output
}
return $output;
}
static $ i = blah ()
не будет компилироваться, потому что php не разрешает выражения и вызовы функций в статических инициализаторах. Вам нужно что-то вроде
function foo() {
static $cache = null;
if(is_null($cache)) $cache = expensive_func();
do something with $cache
}
Как насчет:
if (!isset($i))
{
static $i = moderatelyExpensiveFunctionCall();
}