用于优化的静态变量

kei*_*ant 12 php optimization static-variables

我想知道我是否可以使用静态变量进行优化:

public function Bar() {
    static $i = moderatelyExpensiveFunctionCall();
    if ($i) {
        return something();
    } else {
        return somethingElse();
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道,一旦$i初始化,它将不会被连续调用的那行代码所改变Bar().我认为这意味着moderatelyExpensiveFunctionCall()每次打电话都不会评估,但我想肯定地知道.

一旦PHP看到一个已初始化的静态变量,它是否会跳过该行代码?换句话说,如果我打了很多电话Bar(),或者我在浪费时间,这会优化我的执行时间吗?

Ken*_*ins 17

我发现更容易做类似下面的代码.这样,缓存是全局完成的,而不是每次执行函数.

function moderatelyExpensiveFunctionCall()
{
   static $output = NULL;
   if( is_null( $output ) ) {
     //set $output
   }
   return $output;
}
Run Code Online (Sandbox Code Playgroud)