【发布时间】:2019-11-26 17:58:14
【问题描述】:
假设这种情况。您有一个带有方法的类,对于给定的实例,该方法总是返回相同的值(例如,由构造函数确定)。
final class A
{
private const VALUES = [/*long array*/];
private $a = 5; // initialized in constructor, immutable afterwards
public function isSafe(): bool
{
return \in_array($this->a, self::VALUES, true);
}
}
在函数局部静态变量中缓存它有什么缺点吗?比如这样:
final class A
{
private const VALUES = [/*long array*/];
private $a = 5; // initialized in constructor, immutable afterwards
public function isSafe(): bool
{
static $result = null;
return $result ?? $result = \in_array($this->a, self::VALUES, true);
}
}
这种方法的优缺点是什么?有替代品吗?这被认为是好的、坏的还是任何做法(如果是这样:为什么)?还是应该在构造函数中已经发生“缓存”?
【问题讨论】:
-
在站点注释中,当您有多个 A 类实例时,
ìsSafe()函数将无法正常工作。 (只有第一次调用ìsSafe()会返回正确的结果)。之后,A 类的 所有 个实例将从isSafe()返回相同的值 -
@Turtlefight 哦,看来我当时犯了大错。我认为函数语言环境静态是静态的。对同一个实例进行多次调用,而不是全局调用。那么答案很明显:这是不好的做法。
标签: php performance caching architecture