✔️/❌ (It now adheres to the documentation, but the return value is changed)
Fixed issues
yiisoft/yii2/pull/19396
According to \yii\caching\Cache::getValue() the return value should be "false if the value is not in the cache or expired".
Currently null is returned by the getValue() method. When no serializer is specified that null is casted to a string and the native unserialize() function is used in \yii\caching\Cache::get(). The unserialize() function returns false on failure, this actually causes the get method to return the correct value.
However, when a serializer is specified (e.g. igbinary_unserialize) the null value from getValue() is not casted into a string. On PHP 8.1 this causes an error since a string is expected (https://www.php.net/manual/en/function.igbinary-unserialize.php).
When the getValue() method would have returned the expected false, the get() method would have returned it as is without trying to unserialize it, avoiding the error (yiisoft/yii2/blob/master/framework/caching/Cache.php#L135).
This PR fixes the Cache::getValue() method by returning false when the requested key is not found.
According to
\yii\caching\Cache::getValue()
the return value should be "false if the value is not in the cache or expired".Currently
null
is returned by thegetValue()
method. When noserializer
is specified thatnull
is casted to a string and the nativeunserialize()
function is used in\yii\caching\Cache::get()
. Theunserialize()
function returnsfalse
on failure, this actually causes theget
method to return the correct value. However, when aserializer
is specified (e.g. igbinary_unserialize) thenull
value fromgetValue()
is not casted into a string. On PHP 8.1 this causes an error since a string is expected (https://www.php.net/manual/en/function.igbinary-unserialize.php). When thegetValue()
method would have returned the expectedfalse
, theget()
method would have returned it as is without trying to unserialize it, avoiding the error (yiisoft/yii2/blob/master/framework/caching/Cache.php#L135).This PR fixes the
Cache::getValue()
method by returningfalse
when the requested key is not found.