0 关注者

类 yii\caching\DbDependency

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

DbDependency 代表一个基于 SQL 语句查询结果的依赖。

如果查询结果发生变化,则认为依赖项已更改。查询通过 $sql 属性指定。

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

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$data mixed 保存在缓存中的依赖项数据,稍后将与最新的依赖项数据进行比较。 yii\caching\Dependency
$db string DB 连接的应用程序组件 ID。 yii\caching\DbDependency
$params array 要绑定到 $sql 指定的 SQL 语句的参数(名称 => 值)。 yii\caching\DbDependency
$reusable boolean 此依赖项是否可重用。 yii\caching\Dependency
$sql string 用于确定依赖项是否已更改的 SQL 查询。 yii\caching\DbDependency

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即定义且不为空。 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\DbDependency
generateReusableHash() 生成可用于检索可重用依赖项数据的唯一哈希值。 yii\caching\Dependency

属性详细信息

隐藏继承的属性

$db 公共属性

DB 连接的应用程序组件 ID。

public string $db 'db'
$params 公共属性

要绑定到 $sql 指定的 SQL 语句的参数(名称 => 值)。

public array $params = []
$sql 公共属性

用于确定依赖项是否已更改的 SQL 查询。仅使用查询结果的第一行。

public string $sql null

方法详细信息

隐藏继承的方法

__call() 公共方法

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

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

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

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

方法名称

$params array

方法参数

返回值 mixed

方法返回值

抛出 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

属性名称

返回值 mixed

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 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()

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

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

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

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

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

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

                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

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 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

属性名称

抛出 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

是否将成员变量视为属性

返回值 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

是否将成员变量视为属性

返回值 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 ( )
返回值 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

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

此方法返回全局状态的值。

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

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

返回值 mixed

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

抛出 yii\base\InvalidConfigException

如果 $db 不是有效的应用程序组件 ID

                protected function generateDependencyData($cache)
{
    /* @var $db Connection */
    $db = Instance::ensure($this->db, Connection::className());
    if ($this->sql === null) {
        throw new InvalidConfigException('DbDependency::sql must be set.');
    }
    if ($db->enableQueryCache) {
        // temporarily disable and re-enable query caching
        $db->enableQueryCache = false;
        $result = $db->createCommand($this->sql, $this->params)->queryOne();
        $db->enableQueryCache = true;
    } else {
        $result = $db->createCommand($this->sql, $this->params)->queryOne();
    }
    return $result;
}

            
generateReusableHash() protected method

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

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

另请参阅 $reusable

protected string generateReusableHash ( )
返回值 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

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

返回值 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

方法名称

返回值 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

是否将成员变量视为属性

返回值 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

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

返回值 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 = [];
}