cotonti.com : Вопрос про static $com_cache https://www.cotonti.com Последние сообщения в теме Cotonti en Sun, 14 Dec 2025 15:09:47 -0000 Dayver #47031 Argont:
#47028 Kopusha:

 

спасиб, на свежую голову почитаю.

Сообщение удалено модератором

Или по существу или никак. Тут ресурс тематический потому выходить за рамки или переходить на личности здесь запрещено.

]]>
вс, 27 авг 2023 20:19:35 -0000
Argont #47028 Kopusha:

 

спасиб, на свежую голову почитаю.

Сообщение удалено модератором

]]>
вс, 27 авг 2023 13:27:49 -0000
Kopusha Точно, помнил же что кто то спрашивал. А это я спрашивал)

спасиб, на свежую голову почитаю.

]]>
чт, 24 авг 2023 00:52:30 -0000
Dayver #47024 Kopusha:

Такой вопрос - тут создается какой то кеш static $com_cache = array();

...

Это все вроде бы понимаю, но был бы благодарен за текстовые пояснения. Это кеш для сессии? Сколько он живет? и тд

Я думал вопрос кеша через static решён и закреплён тут

Добавлено 15 минут спустя:

#47024 Kopusha:

Сколько он живет? и тд

Живёт только во время текущего вызова скрипта .... только в области видимости функции внутри которой объявлен и сохраняется и доступен при повторных вызовах этой же функции в пределах пока работает скрипт ... в доках, ссылку на которую уже ранее указывал, про это исчерпывающе с примерами расказано:

Использование статических (static) переменных 

Другой важной особенностью области видимости переменной является статическая переменная. Статическая переменная существует только в локальной области видимости функции, но не теряет своего значения, когда выполнение программы выходит из этой области видимости. 

 

]]>
ср, 23 авг 2023 23:12:02 -0000
Kopusha function cot_comments_count($ext_name, $code, $row = array()) { global $db, $db_com; static $com_cache = array(); if (isset($com_cache[$ext_name][$code])) { return $com_cache[$ext_name][$code]; } $cnt = 0; if (isset($row['com_count'])) { $cnt = (int) $row['com_count']; $com_cache[$ext_name][$code] = $cnt; } else { $comments_join_columns = ''; $comments_join_tables = ''; $comments_join_where = ''; /* == Hook == */ foreach (cot_getextplugins('comments.count.query') as $pl) { include $pl; } /* ===== */ $sql = $db->query("SELECT COUNT(*) $comments_join_columns FROM $db_com $comments_join_tables WHERE com_area = ? AND com_code = ? $comments_join_where", array($ext_name, $code)); if ($sql->rowCount() == 1) { $cnt = (int) $sql->fetchColumn(); $com_cache[$ext_name][$code] = $cnt; } } return $cnt; }

Собственно код из мастер ветки

Такой вопрос - тут создается какой то кеш static $com_cache = array();
и в него пишуться данные и если они там есть то запрос к $sql не выполняется а 

        $cnt = (int) $row['com_count'];
        $com_cache[$ext_name][$code] = $cnt;

а если нет то $cnt = (int) $sql->fetchColumn(); и $com_cache[$ext_name][$code] = $cnt;
Это все вроде бы понимаю, но был бы благодарен за текстовые пояснения. Это кеш для сессии? Сколько он живет? и тд
Заранее спасибо!

]]>
ср, 23 авг 2023 17:02:23 -0000