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 屬性指定。

有關快取 (Cache) 的更多詳細資訊和使用方式,請參閱快取概觀指南文章

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$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() 檢查屬性是否已設定,即已定義且非 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\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() public 方法

定義於: 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 方法

定義於: 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 方法

定義於: yii\base\BaseObject::__isset()

檢查屬性是否已設定,即已定義且非 null。

請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 isset($object->property) 時會被隱式呼叫。

請注意,如果屬性未定義,將會回傳 false。

另請參閱 https://php.dev.org.tw/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 方法

定義於: 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 方法

定義於: yii\base\BaseObject::__unset()

將物件屬性設定為 null。

請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 unset($object->property) 時會被隱式呼叫。

請注意,如果屬性未定義,此方法將不會執行任何操作。如果屬性為唯讀,它將拋出例外。

另請參閱 https://php.dev.org.tw/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 方法

定義於: 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 方法

定義於: 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 靜態方法
自 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 方法

定義於: 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 方法

產生判斷依賴是否已變更所需的資料。

此方法回傳全域狀態的值。

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 方法

定義於: 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() public 方法
自 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() public 方法

定義於: 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() public 方法

定義於: 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() public 方法

定義於: yii\base\BaseObject::init()

初始化物件。

在使用給定的設定初始化物件之後,此方法會在建構子的結尾被呼叫。

public void init ( )

                public function init()
{
}

            
isChanged() public 方法 (自 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() public 靜態方法

定義於: yii\caching\Dependency::resetReusableData()

重設可重複使用依賴的所有快取資料。

public static void resetReusableData ( )

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