Forums / National / Russian / Тех. поддержка / Вопрос про static $com_cache

Kopusha
#1 2023-08-23 17:02
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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;
Это все вроде бы понимаю, но был бы благодарен за текстовые пояснения. Это кеш для сессии? Сколько он живет? и тд
Заранее спасибо!

Dayver
#2 2023-08-23 23:12
#47024 Kopusha:

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

...

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

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

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

#47024 Kopusha:

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

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

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

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

 

Pavlo Tkachenko aka Dayver
This post was edited by Dayver (2023-08-23 23:43, 1 year ago)
Kopusha
#3 2023-08-24 00:52

Точно, помнил же что кто то спрашивал. А это я спрашивал)

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

Argont
#4 2023-08-27 13:27
#47028 Kopusha:

 

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

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

иногда поржать над задравшим подбородок разработчиком
This post was edited by Dayver (2023-08-27 20:17, 1 year ago)
Dayver
#5 2023-08-27 20:19
#47031 Argont:
#47028 Kopusha:

 

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

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

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

Pavlo Tkachenko aka Dayver