【问题标题】:How to cache Methods for one process?如何缓存一个进程的方法?
【发布时间】:2023-02-03 18:58:10
【问题描述】:

我试图缓存一个对象的方法,所以每次我调用类和方法时,它不会在第一次后再次处理。

这就是我想要实现的目标,

class App {
    public $data = null;

    public function print() {
        if ( $this->data === null ) {
            $this->data = "First time.";
        }
        else {
            $this->data = "After first time.";
        }
        return $this->data;
    }
}

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

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

结果

第一次。
第一次之后。
第一次。
第一次之后。

如您所见,当我在 $data2 中再次调用它时,它正在再次处理 print() 方法。

是否可以缓存所以结果将是

第一次。
第一次之后。
第一次之后。
第一次之后。

【问题讨论】:

  • 如果需要,请继续使用 $data 并且不要创建该类的新实例。一个类的每个实例是故意地分开,因此您可以区别对待它们(例如,您可以有一个 Employee 类的多个实例,这些实例可以形成一个员工列表,并且您希望为每个实例打印不同的数据 - 这将是一个好的事物)。
  • 或者,如果您想要一个在类的所有实例(否则是分开的)之间共有的变量,您可以考虑使用静态变量和/或函数。
  • @ADyson 帮了大忙!现在我正确地理解了静态和非静态方法。

标签: php oop


【解决方案1】:

为了获得所需的恒定输出,您需要

将类内的公共变量更改为静态变量

因为公共静态变量每次都共享该类的所有可用实例。

class App {
    public static $data = null;

    public function print() {
        if ( self::$data === null ) {
            self::$data = "First time.";
        }
        else {
            self::$data = "After first time.";
        }
        return self::$data;
    }
}

$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.

【讨论】:

    猜你喜欢
    • 2011-03-11
    • 2014-09-21
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    相关资源
    最近更新 更多