0 关注者

类 yii\caching\ExpressionDependency

继承yii\caching\ExpressionDependency » yii\caching\Dependency » yii\base\BaseObject
实现yii\base\Configurable
版本可用2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/caching/ExpressionDependency.php

ExpressionDependency 表示基于 PHP 表达式结果的依赖关系。

ExpressionDependency 将使用 eval() 来评估 PHP 表达式。如果表达式的结果与存储数据到缓存时评估的结果相同,则依赖关系将被报告为未改变。

PHP 表达式可以是任何具有值的 PHP 代码。要了解更多关于表达式的知识,请参阅 php 手册

有关缓存的更多详细信息和使用方法,请参阅 缓存指南

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$data mixed 存储在缓存中的依赖关系数据,之后与最新的依赖关系数据进行比较。 yii\caching\Dependency
$expression string PHP 表达式的字符串表示形式,其结果用于确定依赖关系。 yii\caching\ExpressionDependency
$params mixed 与该依赖关系相关的自定义参数。 yii\caching\ExpressionDependency
$reusable boolean 该依赖关系是否可重用。 yii\caching\Dependency

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即定义且不为 null。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__unset() 将对象属性设置为 null。 yii\base\BaseObject
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\BaseObject
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\BaseObject
className() 返回此类的完全限定名称。 yii\base\BaseObject
evaluateDependency() 通过生成和保存与依赖关系相关的數據来评估依赖关系。 yii\caching\Dependency
getHasChanged() 返回一个值,指示依赖关系是否已更改。 yii\caching\Dependency
hasMethod() 返回一个值,指示是否定义了方法。 yii\base\BaseObject
hasProperty() 返回一个值,指示是否定义了属性。 yii\base\BaseObject
init() 初始化对象。 yii\base\BaseObject
isChanged() 检查依赖关系是否已更改。 yii\caching\Dependency
resetReusableData() 重置可重用依赖关系的所有缓存数据。 yii\caching\Dependency

保护方法

隐藏继承的方法

方法 描述 定义于
generateDependencyData() 生成确定依赖关系是否已更改所需的数据。 yii\caching\ExpressionDependency
generateReusableHash() 生成一个可用于检索可重用依赖关系数据的唯一哈希值。 yii\caching\Dependency

属性详情

隐藏继承的属性

$expression 公共属性

PHP 表达式的字符串表示形式,其结果用于确定依赖关系。PHP 表达式可以是任何评估为值的 PHP 代码。要了解更多关于表达式的知识,请参阅 php 手册

public string $expression 'true'
$params 公共属性

与该依赖关系相关的自定义参数。您可以在 $expression 中使用 $this->params 获取此属性的值。

public mixed $params null

方法详情

隐藏继承的方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用它。

public mixed __call ( $name, $params )
$name string

方法名

$params array

方法参数

return mixed

方法返回值

throws yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() 公共方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现执行两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果此方法在子类中被重写,建议

  • 构造函数的最后一个参数是一个配置数组,就像这里的 $config 一样。
  • 在构造函数的末尾调用父类实现。
public void __construct ( $config = [] )
$config array

用于初始化对象属性的键值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() public method

定义在: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $object->property; 时会隐式调用。

另请参阅 __set()

public mixed __get ( $name )
$name string

属性名称

return mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只写属性

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

定义在: yii\base\BaseObject::__isset()

检查属性是否已设置,即定义且不为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($object->property) 时会隐式调用。

请注意,如果属性未定义,将返回 false。

另请参阅 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

return boolean

命名的属性是否已设置(非空)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public method

定义在: yii\base\BaseObject::__set()

设置对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $object->property = $value; 时会隐式调用。

另请参阅 __get()

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只读属性

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public method

定义在: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 unset($object->property) 时会隐式调用。

请注意,如果属性未定义,此方法将不做任何操作。如果属性是只读属性,它将抛出异常。

另请参阅 https://php.ac.cn/manual/en/function.unset.php

public void __unset ( $name )
$name string

属性名称

throws yii\base\InvalidCallException

如果属性是只读属性。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
canGetProperty() public method

定义在: yii\base\BaseObject::canGetProperty()

返回一个值,指示是否可以读取属性。

如果属性是可读的,则

  • 该类有一个与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类有一个使用指定名称的成员变量(当 $checkVars 为 true 时);

另请参阅 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public method

定义在: yii\base\BaseObject::canSetProperty()

返回一个值,指示是否可以设置属性。

如果属性是可写的,则

  • 该类有一个与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类有一个使用指定名称的成员变量(当 $checkVars 为 true 时);

另请参阅 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() public static method
自 2.0.14 起已弃用。在 PHP >=5.5 上,请改用 ::class

定义在: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
return string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
evaluateDependency() public method

定义在: yii\caching\Dependency::evaluateDependency()

通过生成和保存与依赖关系相关的數據来评估依赖关系。

此方法在缓存将数据写入缓存之前被调用。

public void evaluateDependency ( $cache )
$cache yii\caching\CacheInterface

当前正在评估此依赖关系的缓存组件

                public function evaluateDependency($cache)
{
    if ($this->reusable) {
        $hash = $this->generateReusableHash();
        if (!array_key_exists($hash, self::$_reusableData)) {
            self::$_reusableData[$hash] = $this->generateDependencyData($cache);
        }
        $this->data = self::$_reusableData[$hash];
    } else {
        $this->data = $this->generateDependencyData($cache);
    }
}

            
generateDependencyData() protected method

生成确定依赖关系是否已更改所需的数据。

此方法返回 PHP 表达式的结果。

protected mixed generateDependencyData ( $cache )
$cache yii\caching\CacheInterface

当前正在评估此依赖关系的缓存组件

return mixed

确定依赖关系是否已更改所需的数据。

                protected function generateDependencyData($cache)
{
    return eval("return {$this->expression};");
}

            
generateReusableHash() protected method

定义在: yii\caching\Dependency::generateReusableHash()

生成一个可用于检索可重用依赖关系数据的唯一哈希值。

另请参阅 $reusable

protected string generateReusableHash ( )
return string

此缓存依赖关系的唯一哈希值。

                protected function generateReusableHash()
{
    $clone = clone $this;
    $clone->data = null; // https://github.com/yiisoft/yii2/issues/3052
    try {
        $serialized = serialize($clone);
    } catch (\Exception $e) {
        // unserializable properties are nulled
        foreach ($clone as $name => $value) {
            if (is_object($value) && $value instanceof \Closure) {
                $clone->{$name} = null;
            }
        }
        $serialized = serialize($clone);
    }
    return sha1($serialized);
}

            
getHasChanged() 公共方法
自版本 2.0.11 起已弃用。将在版本 2.1 中移除。请使用 isChanged() 代替。

定义于: yii\caching\Dependency::getHasChanged()

返回一个值,指示依赖关系是否已更改。

public boolean getHasChanged ( $cache )
$cache yii\caching\CacheInterface

当前正在评估此依赖关系的缓存组件

return boolean

依赖项是否已更改。

                public function getHasChanged($cache)
{
    return $this->isChanged($cache);
}

            
hasMethod() 公共方法

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示是否定义了方法。

默认实现是调用 PHP 函数 method_exists()。如果您实现了 PHP 魔术方法 __call(),则可以重写此方法。

public boolean hasMethod ( $name )
$name string

方法名

return boolean

方法是否已定义。

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() 公共方法

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示是否定义了属性。

属性定义如下:

  • 该类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类有一个使用指定名称的成员变量(当 $checkVars 为 true 时);

另请参阅

public boolean hasProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否已定义。

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() 公共方法

定义于: yii\base\BaseObject::init()

初始化对象。

此方法在构造函数结束时调用,在使用给定配置初始化对象之后调用。

public void init ( )

                public function init()
{
}

            
isChanged() 公共方法 (自版本 2.0.11 起可用)

定义于: yii\caching\Dependency::isChanged()

检查依赖关系是否已更改。

public boolean isChanged ( $cache )
$cache yii\caching\CacheInterface

当前正在评估此依赖关系的缓存组件

return boolean

依赖项是否已更改。

                public function isChanged($cache)
{
    if ($this->reusable) {
        $hash = $this->generateReusableHash();
        if (!array_key_exists($hash, self::$_reusableData)) {
            self::$_reusableData[$hash] = $this->generateDependencyData($cache);
        }
        $data = self::$_reusableData[$hash];
    } else {
        $data = $this->generateDependencyData($cache);
    }
    return $data !== $this->data;
}

            
resetReusableData() 公共静态方法

定义于: yii\caching\Dependency::resetReusableData()

重置可重用依赖关系的所有缓存数据。

public static void resetReusableData ( )

                public static function resetReusableData()
{
    self::$_reusableData = [];
}