1212 *
1313 * @since 22.10.2020 Доработка.
1414 */
15- class LegacyCacher
15+ final class LegacyCacher
1616{
1717 /**
1818 * @var CPHPCache $cacheHandler Обработчик кэша.
1919 */
20- protected $ cacheHandler ;
20+ private $ cacheHandler ;
2121
2222 /**
2323 * @var string ID кэша.
2424 */
25- protected $ cacheId ;
25+ private $ cacheId ;
2626
2727 /**
2828 * @var callable $callback Обработчик, он же получатель данных.
2929 */
30- protected $ callback ;
30+ private $ callback ;
3131
3232 /**
3333 * @var array $timeSeconds Параметры обработчика.
3434 */
35- protected $ arCallbackParams ;
35+ private $ arCallbackParams ;
3636
3737 /**
3838 * @var integer $timeSeconds Время жизни кэша.
3939 */
40- protected $ timeSeconds ;
40+ private $ timeSeconds ;
4141
4242 /**
4343 * @var string $currentUrl Текущий URL.
4444 */
45- protected $ currentUrl ;
45+ private $ currentUrl ;
4646
4747 /**
4848 * @var string $baseDir Базовая директория кэша (подпапка в bitrix/cache).
4949 */
50- protected $ baseDir = '' ;
50+ private $ baseDir = '' ;
5151
5252 /**
5353 * Cacher constructor.
5454 *
55- * @param CPHPCache $cacheHandler Обработчик кэша.
56- * @param string $cacheId Ключ кэша.
57- * @param mixed $callback Callback функция.
58- * @param array $arCallbackParams Параметры callback функции.
59- * @param integer $timeSeconds Время кэширования.
60- * @param string $currentUrl Текущий URL.
55+ * @param CPHPCache $cacheHandler Обработчик кэша.
56+ * @param string $cacheId Ключ кэша.
57+ * @param callable|null $callback Callback функция.
58+ * @param array $arCallbackParams Параметры callback функции.
59+ * @param integer $timeSeconds Время кэширования.
60+ * @param string $currentUrl Текущий URL.
6161 */
6262 public function __construct (
6363 CPHPCache $ cacheHandler ,
6464 string $ cacheId = '' ,
65- $ callback = null ,
65+ ? callable $ callback = null ,
6666 array $ arCallbackParams = [],
6767 int $ timeSeconds = 604800 ,
6868 string $ currentUrl = ''
6969 ) {
7070 $ this ->cacheHandler = $ cacheHandler ;
7171 $ this ->currentUrl = $ currentUrl ;
7272
73+ $ callbackSalt = '' ;
74+ if ($ callback !== null ) {
75+ /** @var mixed $callbackResult */
76+ $ callbackResult = $ callback ();
77+ if (is_array ($ callbackResult )) {
78+ $ callbackResult = implode ('' , $ callbackResult );
79+ }
80+
81+ if (is_object ($ callbackResult )) {
82+ $ callbackResult = serialize ($ callbackResult );
83+ }
84+
85+ $ callbackSalt = (string )$ callbackResult ;
86+ }
87+
7388 // ID кэша формируется из переданного и соли от callback и параметров.
74- $ this ->cacheId = $ cacheId . md5 ($ callback ) . $ this ->hashCache ($ arCallbackParams );
89+ $ this ->cacheId = $ cacheId . md5 ($ callbackSalt ) . $ this ->hashCache ($ arCallbackParams );
90+
91+ if ($ callback !== null ) {
92+ $ this ->callback = $ callback ;
93+ }
7594
76- $ this ->callback = $ callback ;
7795 $ this ->arCallbackParams = $ arCallbackParams ;
7896
7997 // Отрубить кэш для окружения dev.
@@ -83,18 +101,18 @@ public function __construct(
83101 /**
84102 * Фасад.
85103 *
86- * @param string $cacheId Ключ кэша.
87- * @param mixed $callback Callback функция.
88- * @param array $arCallbackParams Параметры callback функции.
89- * @param integer $timeSeconds Время кэширования.
90- * @param string $currentUrl Текущий URL.
104+ * @param string $cacheId Ключ кэша.
105+ * @param callable|null $callback Callback функция.
106+ * @param array $arCallbackParams Параметры callback функции.
107+ * @param integer $timeSeconds Время кэширования.
108+ * @param string $currentUrl Текущий URL.
91109 *
92110 * @return mixed
93111 * @throws Exception
94112 */
95113 public static function cacheFacade (
96114 string $ cacheId ,
97- $ callback ,
115+ ? callable $ callback ,
98116 array $ arCallbackParams = [],
99117 int $ timeSeconds = 86400 ,
100118 string $ currentUrl = ''
@@ -123,11 +141,13 @@ public function returnResultCache()
123141 $ cachePath = '/ ' . SITE_ID . '/ ' . $ this ->baseDir . $ this ->cacheId ;
124142
125143 if ($ this ->cacheHandler ->InitCache ($ this ->timeSeconds , $ this ->cacheId , $ cachePath )) {
144+ /** @var array $vars */
126145 $ vars = $ this ->cacheHandler ->GetVars ();
127- $ arResult = $ vars ['result ' ];
146+ $ arResult = ( array ) $ vars ['result ' ];
128147 } elseif ($ this ->cacheHandler ->StartDataCache ()) {
129148 $ callback = $ this ->callback ;
130149 try {
150+ /** @psalm-suppress MixedAssignment */
131151 $ arResult = $ callback (...$ this ->arCallbackParams );
132152 } catch (Exception $ e ) {
133153 $ this ->cacheHandler ->AbortDataCache ();
@@ -233,7 +253,7 @@ public function setCurrentUrl(string $currentUrl): LegacyCacher
233253 *
234254 * @return string
235255 */
236- protected function hashCache (array $ arParams = []) : string
256+ private function hashCache (array $ arParams = []) : string
237257 {
238258 return md5 (serialize ($ arParams ));
239259 }
0 commit comments