PHP中的懒函数定义 - 可能吗?

scu*_*ffe 5 php optimization design-patterns

在JavaScript中,只需在第一次调用函数时执行昂贵的一次性操作,就可以使用" 延迟函数定义"来优化对函数的第2次调用.

我想在PHP 5中做同样的事情,但不允许重新定义函数,也不会重载函数.

实际上我想做的就像下面这样,只是优化了所以第二次 - 第N次呼叫(比如25-100)不需要重新检查它们是否是第一次呼叫.

$called = false;
function foo($param_1){
  global $called;
  if($called == false){
    doExpensiveStuff($param_1);
    $called = true;
  }
  echo '<b>'.$param_1.'</b>';
}
Run Code Online (Sandbox Code Playgroud)

PS我曾经考虑使用include_once()或require_once()作为函数的第一行来执行外部代码一次,但我听说这些也很昂贵.

有任何想法吗?还是有更好的方法来解决这个问题?

dir*_*ide 13

使用本地静态var:

function foo() {
    static $called = false;
    if ($called == false) {
        $called = true;
        expensive_stuff();
    }
}
Run Code Online (Sandbox Code Playgroud)

避免使用全局.它使全局命名空间变得混乱,并使函数封装得更少.如果除了函数内部之外的其他地方需要知道它是否被调用,那么将这个函数放在像Alan Storm所说的类中是值得的.


Joh*_*kin 6

你有没有真正描述过这段代码?我怀疑额外的布尔测试是否会对页面渲染时间产生任何可测量的影响.