# Class yii\caching\TagDependency

Inheritance | yii\caching\TagDependency » yii\caching\Dependency » yii\base\BaseObject
Implements | yii\base\Configurable
Available since version | 2.0
Source Code | https://github.com/yiisoft/yii2/blob/master/framework/caching/TagDependency.php

TagDependency associates a cached data item with one or multiple $tags.

By calling invalidate(), you can invalidate all cached data items that are associated with the specified tag name(s).

    // setting multiple cache keys to store data forever and tagging them with "user-123"
    Yii::$app->cache->set('user_42_profile', '', 0, new TagDependency(['tags' => 'user-123']));
    Yii::$app->cache->set('user_42_stats', '', 0, new TagDependency(['tags' => 'user-123']));

    // invalidating all keys tagged with "user-123"
    TagDependency::invalidate(Yii::$app->cache, 'user-123');

For more details and usage information on Cache, see the guide article on caching.

## Public Properties

Hide inherited properties

Property | Type | Description | Defined By
--- | --- | --- | ---
$data | mixed | The dependency data that is saved in cache and later is compared with the latest dependency data. | yii\caching\Dependency
$reusable | boolean | Whether this dependency is reusable or not. | yii\caching\Dependency
$tags | string|array | A list of tag names for this dependency. | yii\caching\TagDependency

## Public Methods

Hide inherited methods

Method | Description | Defined By
--- | --- | ---
__call() | Calls the named method which is not a class method. | yii\base\BaseObject
__construct() | Constructor. | yii\base\BaseObject
__get() | Returns the value of an object property. | yii\base\BaseObject
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\BaseObject
__set() | Sets value of an object property. | yii\base\BaseObject
__unset() | Sets an object property to null. | yii\base\BaseObject
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\BaseObject
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\BaseObject
className() | Returns the fully qualified name of this class. | yii\base\BaseObject
evaluateDependency() | Evaluates the dependency by generating and saving the data related with dependency. | yii\caching\Dependency
getHasChanged() | Returns a value indicating whether the dependency has changed. | yii\caching\Dependency
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\BaseObject
hasProperty() | Returns a value indicating whether a property is defined. | yii\base\BaseObject
init() | Initializes the object. | yii\base\BaseObject
invalidate() | Invalidates all of the cached data items that are associated with any of the specified $tags. | yii\caching\TagDependency
isChanged() | Checks whether the dependency is changed. | yii\caching\TagDependency
resetReusableData() | Resets all cached data for reusable dependencies. | yii\caching\Dependency

## Protected Methods

Hide inherited methods

Method | Description | Defined By
--- | --- | ---
generateDependencyData() | Generates the data needed to determine if dependency has been changed. | yii\caching\TagDependency
generateReusableHash() | Generates a unique hash that can be used for retrieving reusable dependency data. | yii\caching\Dependency
getTimestamps() | Returns the timestamps for the specified tags. | yii\caching\TagDependency
touchKeys() | Generates the timestamp for the specified cache keys. | yii\caching\TagDependency

## Property Details

Hide inherited properties

$tags public property

A list of tag names for this dependency. For a single tag, you may specify it as a string.

public string|array $tags = []

## Method Details

Hide inherited methods

__call() public method

Defined in: yii\base\BaseObject::__call()

Calls the named method which is not a class method.

Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

public mixed __call ( $name, $params )
$name | string | The method name
$params | array | Method parameters
return | mixed | The method return value
throws | yii\base\UnknownMethodException | when calling unknown method

Source code

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

__construct() public method

Defined in: yii\base\BaseObject::__construct()

Constructor.

The default implementation does two things:

- Initializes the object with the given configuration `$config`.
- Call init().

If this method is overridden in a child class, it is recommended that

- the last parameter of the constructor is a configuration array, like `$config` here.
- call the parent implementation at the end of the constructor.

public void __construct ( $config = [] )
$config | array | Name-value pairs that will be used to initialize the object properties

Source code

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

__get() public method

Defined in: yii\base\BaseObject::__get()

Returns the value of an object property.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing `$value = $object->property;`.

See also __set().

public mixed __get ( $name )
$name | string | The property name
return | mixed | The property value
throws | yii\base\UnknownPropertyException | if the property is not defined
throws | yii\base\InvalidCallException | if the property is write-only

Source code

                    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

Defined in: yii\base\BaseObject::__isset()

Checks if a property is set, i.e. defined and not null.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing `isset($object->property)`.

Note that if the property is not defined, false will be returned.

See also https://www.php.net/manual/en/function.isset.php.

public boolean __isset ( $name )
$name | string | The property name or the event name
return | boolean | Whether the named property is set (not null).

Source code

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

__set() public method

Defined in: yii\base\BaseObject::__set()

Sets value of an object property.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing `$object->property = $value;`.

See also __get().

public void __set ( $name, $value )
$name | string | The property name or the event name
$value | mixed | The property value
throws | yii\base\UnknownPropertyException | if the property is not defined
throws | yii\base\InvalidCallException | if the property is read-only

Source code

                    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

Defined in: yii\base\BaseObject::__unset()

Sets an object property to null.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing `unset($object->property)`.

Note that if the property is not defined, this method will do nothing. If the property is read-only, it will throw an exception.

See also https://www.php.net/manual/en/function.unset.php.

public void __unset ( $name )
$name | string | The property name
throws | yii\base\InvalidCallException | if the property is read only.

Source code

                    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

Defined in: yii\base\BaseObject::canGetProperty()

Returns a value indicating whether a property can be read.

A property is readable if:

- the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);

See also canSetProperty().

public boolean canGetProperty ( $name, $checkVars = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
return | boolean | Whether the property can be read

Source code

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

canSetProperty() public method

Defined in: yii\base\BaseObject::canSetProperty()

Returns a value indicating whether a property can be set.

A property is writable if:

- the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);

See also canGetProperty().

public boolean canSetProperty ( $name, $checkVars = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
return | boolean | Whether the property can be written

Source code

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

className() public static method
Deprecated since 2.0.14. On PHP >=5.5, use `::class` instead.

Defined in: yii\base\BaseObject::className()

Returns the fully qualified name of this class.

public static string className ( )
return | string | The fully qualified name of this class.

Source code

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

evaluateDependency() public method

Defined in: yii\caching\Dependency::evaluateDependency()

Evaluates the dependency by generating and saving the data related with dependency.

This method is invoked by cache before writing data into it.

public void evaluateDependency ( $cache )
$cache | yii\caching\CacheInterface | The cache component that is currently evaluating this dependency

Source code

                    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

Generates the data needed to determine if dependency has been changed.

This method does nothing in this class.

protected mixed generateDependencyData ( $cache )
$cache | yii\caching\CacheInterface | The cache component that is currently evaluating this dependency
return | mixed | The data needed to determine if dependency has been changed.

Source code

                    protected function generateDependencyData($cache)
    {
        $timestamps = $this->getTimestamps($cache, (array) $this->tags);
        $newKeys = [];
        foreach ($timestamps as $key => $timestamp) {
            if ($timestamp === false) {
                $newKeys[] = $key;
            }
        }
        if (!empty($newKeys)) {
            $timestamps = array_merge($timestamps, static::touchKeys($cache, $newKeys));
        }
        return $timestamps;
    }

generateReusableHash() protected method

Defined in: yii\caching\Dependency::generateReusableHash()

Generates a unique hash that can be used for retrieving reusable dependency data.

See also $reusable.

protected string generateReusableHash ( )
return | string | A unique hash value for this cache dependency.

Source code

                    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 method
Deprecated since version 2.0.11. Will be removed in version 2.1. Use isChanged() instead.

Defined in: yii\caching\Dependency::getHasChanged()

Returns a value indicating whether the dependency has changed.

public boolean getHasChanged ( $cache )
$cache | yii\caching\CacheInterface | The cache component that is currently evaluating this dependency
return | boolean | Whether the dependency has changed.

Source code

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

getTimestamps() protected method

Returns the timestamps for the specified tags.

protected array getTimestamps ( $cache, $tags )
$cache | yii\caching\CacheInterface |
$tags | string[] |
return | array | The timestamps indexed by the specified tags.

Source code

                    protected function getTimestamps($cache, $tags)
    {
        if (empty($tags)) {
            return [];
        }
        $keys = [];
        foreach ($tags as $tag) {
            $keys[] = $cache->buildKey([__CLASS__, $tag]);
        }
        return $cache->multiGet($keys);
    }

hasMethod() public method

Defined in: yii\base\BaseObject::hasMethod()

Returns a value indicating whether a method is defined.

The default implementation is a call to php function `method_exists()`. You may override this method when you implemented the php magic method `__call()`.

public boolean hasMethod ( $name )
$name | string | The method name
return | boolean | Whether the method is defined

Source code

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

hasProperty() public method

Defined in: yii\base\BaseObject::hasProperty()

Returns a value indicating whether a property is defined.

A property is defined if:

- the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);

See also:

- canGetProperty()
- canSetProperty()

public boolean hasProperty ( $name, $checkVars = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
return | boolean | Whether the property is defined

Source code

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

init() public method

Defined in: yii\base\BaseObject::init()

Initializes the object.

This method is invoked at the end of the constructor after the object is initialized with the given configuration.

public void init ( )

Source code

                    public function init()
    {
    }

invalidate() public static method

Invalidates all of the cached data items that are associated with any of the specified $tags.

public static void invalidate ( $cache, $tags )
$cache | yii\caching\CacheInterface | The cache component that caches the data items
$tags | string|array |

Source code

                    public static function invalidate($cache, $tags)
    {
        $keys = [];
        foreach ((array) $tags as $tag) {
            $keys[] = $cache->buildKey([__CLASS__, $tag]);
        }
        static::touchKeys($cache, $keys);
    }

isChanged() public method (available since version 2.0.11)

Checks whether the dependency is changed.

public boolean isChanged ( $cache )
$cache | yii\caching\CacheInterface | The cache component that is currently evaluating this dependency
return | boolean | Whether the dependency has changed.

Source code

                    public function isChanged($cache)
    {
        $timestamps = $this->getTimestamps($cache, (array) $this->tags);
        return $timestamps !== $this->data;
    }

resetReusableData() public static method

Defined in: yii\caching\Dependency::resetReusableData()

Resets all cached data for reusable dependencies.

public static void resetReusableData ( )

Source code

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

touchKeys() protected static method

Generates the timestamp for the specified cache keys.

protected static array touchKeys ( $cache, $keys )
$cache | yii\caching\CacheInterface |
$keys | string[] |
return | array | The timestamp indexed by cache keys

Source code

                    protected static function touchKeys($cache, $keys)
    {
        $items = [];
        $time = microtime();
        foreach ($keys as $key) {
            $items[$key] = $time;
        }
        $cache->multiSet($items);
        return $items;
    }