Как сделать переменную доступной на время запроса страницы


Я пытаюсь ограничить количество операций чтения базы данных на запрос страницы. В настоящее время каждый раз, когда срабатывает крючок get_avatar, я вызываю get_option(), который возвращает некоторые данные. Возвращенный $data не изменяется в течение всего запроса страницы, поэтому у меня происходит много избыточных вызовов get_option() (потому что get_avatar срабатывает несколько раз на некоторых моих страницах).

function my_check() {
    $data = get_option( 'blah' );
    return $data;
}

function my_func( $avatar, $id_or_email, $size, $default, $alt ) {
    if ( my_check() ) {
        // Do something.
    }
}
add_filter( 'get_avatar', 'my_func', 10, 5 );

Моей первой мыслью было использовать объектно-ориентированный PHP, чтобы сделать $data переменной класса, но я чувствую, что класс перебор для этого простого сценария. Затем я подумал о том, чтобы сделать $data глобальной переменной, но потом понял, что глобальные переменные - это плохо. Поэтому я исключил эти два подхода.

Есть ли другой способ сделать переменную $data доступной на время запроса страницы? Моя цель состоит в том, чтобы избежать многократных звонков в get_option().

Примечание: Значение $data может изменяться в промежутках между запросами страницы.

 2
php
Author: henrywright, 2015-03-11

1 answers

Класс обеспечивает структуру, и если это то, что вам нужно сделать, то сделайте это. Альтернативой может быть глобальная переменная, что является плохой практикой и ее следует избегать (и делает надежное модульное тестирование практически невозможным)

Однако вся ваша предпосылка не нужна. WordPress уже хранит эту опцию в своих кэшах, поэтому второго вызова базы данных не происходит.

В противном случае да, класс или объект были бы ответом

 2
Author: Tom J Nowell, 2015-03-11 10:37:49