php - PHP 中的惰性函数定义 - 这可能吗?

标签 php design-patterns optimization

在 JavaScript 中,您可以使用 Lazy Function Definitions通过仅在第一次调用函数时执行昂贵的一次性操作来优化对函数的第 2 - N 次调用。

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

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

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

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

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

最佳答案

使用本地静态变量:

function foo() {
    static $called = false;
    if ($called == false) {
        $called = true;
        expensive_stuff();
    }
}

避免为此使用全局变量。它扰乱了全局 namespace 并使函数的封装性降低。如果除了函数内部之外的其他地方需要知道它是否被调用,那么将这个函数放在像 Alan Storm 指出的类中是值得的。

关于php - PHP 中的惰性函数定义 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/118698/

相关文章:

design-patterns - 构建器模式与构造函数中的参数数量有关吗?

javascript - Javascript中有重复声明优化吗?

java - 延迟访问服务器以尽量避开高峰时间

php - Laravel artisan 优化不创建引导/编译

php - PhpStorm警告-无法解析目录-没有文件扩展名的href

javascript - 如何制作加载更多按钮

php - Docker容器的网关Nginx错误

php - 使用 PHP 列出 MySQL 数据库中的所有表

model-view-controller - MVC 真的是四头模式吗?

testing - 我应该继续注册失败吗?