You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个进程中缓存类方法,实现跨实例复用执行结果?

实现跨实例的方法调用缓存

要让方法首次调用后,所有实例后续调用都不再执行初始处理,核心是用静态属性存储缓存状态——静态属性属于类本身,而非单个实例,所有实例共享这一份数据。

修改后的代码

class App {
    // 用静态属性存储共享的缓存状态
    private static $cachedData = null;

    public function print() {
        if (self::$cachedData === null) {
            // 仅首次调用时执行初始化
            self::$cachedData = "First time.";
        } else {
            self::$cachedData = "After first time.";
        }
        return self::$cachedData;
    }
}

$data = new App();
echo $data->print() . "<br>";
echo $data->print() . "<br>";

$data2 = new App();
echo $data2->print() . "<br>";
echo $data2->print() . "<br>";

执行结果

First time.
After first time.
After first time.
After first time.

原理说明

  • 将原来的实例属性public $data替换为静态属性private static $cachedData,静态属性通过self::访问,所有实例共用这一个变量。
  • 首次调用任意实例的print()方法时,self::$cachedData为null,执行初始化赋值;后续无论哪个实例调用,self::$cachedData已存在值,直接进入else分支。

如果需要更复杂的缓存逻辑(比如缓存多组不同结果),可以将静态属性扩展为数组,存储键值对形式的缓存数据,但当前场景下单个静态变量已满足需求。

内容的提问来源于stack exchange,提问作者Russell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:35:18