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

Kopusha
#1 23. August 2023, 17:02
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 23. August 2023, 23:12
#47024 Kopusha:

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

...

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

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

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

#47024 Kopusha:

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

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

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

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

 

Pavlo Tkachenko aka Dayver

Dieser Beitrag wurde von Dayver (am 23. August 2023, 23:43, vor 9 Monate) bearbeitet
Kopusha
#3 24. August 2023, 00:52

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

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

Argont
#4 27. August 2023, 13:27
#47028 Kopusha:

 

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

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

иногда поржать над задравшим подбородок разработчиком

Dieser Beitrag wurde von Dayver (am 27. August 2023, 20:17, vor 9 Monate) bearbeitet
Dayver
#5 27. August 2023, 20:19
#47031 Argont:
#47028 Kopusha:

 

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

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

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

Pavlo Tkachenko aka Dayver