get_query_var vs глобальные переменные запроса в WordPress?

18 апр. 2013 г., 16:44:46
Просмотры: 19K
Голосов: 3

У меня есть переменные запроса, определенные в functions.php с помощью:

add_filter('init', 'add_query_vars');

function add_query_vars() {
    global $wp;
    $wp->add_query_var('profession');
}

До сих пор для получения переменной запроса в шаблонах страниц я использовал $profession = get_query_var('profession');. Похожий пример $paged = get_query_var('paged'); также показан для переменной $paged на странице Codex для get_query_var(). Однако сегодня я узнал, что к переменным запроса можно обращаться как к глобальным переменным. Все, что мне нужно сделать - это объявить global $profession;, и я могу использовать значение переменной в любом месте шаблона. Мне кажется, что это гораздо лучший способ доступа к переменным запроса без накладных расходов вложенных функций get_query_var().

Есть ли веская причина использовать get_query_var() для получения переменных запроса вместо доступа к ним как к глобальным переменным? Если нет, то зачем вообще существует get_query_var()?

0
Все ответы на вопрос 1
2

get_query_var() является обёрткой для $wp_query->get($var);. Однако глобальная переменная $wp_query не всегда идентична той, что была установлена во время запроса. В этом и заключается основная проблема с query_posts().
Другие плагины также могут непреднамеренно перезаписывать эти переменные. Я видел плагины, которые добавляли $i в глобальное пространство имён…

Возвращаемые значения также различаются:

  • $GLOBALS['missing_var'] вернёт NULL, если такой переменной не существует. Строгая проверка типа выглядит так: if ( NULL !== $GLOBALS['missing_var'] ).
  • get_query_var('missing_var'); вернёт пустую строку, если переменная отсутствует. Строгая проверка типа: if ( '' !== get_query_var('missing_var').

Когда другие программисты работают с вашим кодом, они всегда могут проследить за get_query_var(), чтобы увидеть резервное значение. С глобальными переменными такое невозможно.

Кроме того, существуют планы по сокращению количества глобальных переменных в WordPress. Используйте API (функцию), и вы, скорее всего, будете в безопасности. Доступ к глобальным переменным, напротив, может привести к проблемам.

18 апр. 2013 г. 16:55:10
Комментарии

Я бы также добавил, что при выборе между глобальным пространством имен и чем-то еще, обычно лучше не использовать глобальное пространство имен, так как это создает беспорядок и неясно, откуда берется переменная.

Tom J Nowell Tom J Nowell
18 апр. 2013 г. 17:48:09

Четкое и определенное объяснение. Именно то, что я искал. Спасибо.

John John
18 апр. 2013 г. 23:00:21