Global State — это данные (переменные, объекты, массивы), которые доступны из любой части программы, независимо от области видимости (scope). То есть это переменные, которые существуют “везде”.
В PHP глобальное состояние чаще всего проявляется в виде:
- Глобальных переменных
- Суперглобальных массивов (
$_GET,$_POST,$_SESSION,$_SERVER, и т.д.) - Singleton-объектов
- Статических свойств классов
- Констант, объявленных через
define()илиconstвне класса
global
Пример 1:
$counter = 0;
function incrementCounter() {
global $counter;
$counter++;
}
incrementCounter();
echo $counter; // 1
Пример 2:
Мне надо было глобально установить результаты фильтрации постов.
На Ricconected у нас есть функция, которая фильтрует результаты поиска.

В конце функции, перед возвратом результатов, установим их в глобальную переменную.
$sorted_results = sort_posts_by_cpt( $final_posts );
global $wp_query;
$wp_query->posts = $sorted_results;
$wp_query->post_count = count( $sorted_results );
global $custom_search_filtered_posts;
$custom_search_filtered_posts = $sorted_results;
return $sorted_results;
И теперь можем обращаться к global $custom_search_filtered_posts в другом месте.
Вот, например, мы получаем ее в Functions.php и передаем в wp_localize_script.
global $custom_search_filtered_posts;
$structured = [];
if (!empty($custom_search_filtered_posts)) {
$structured = array_map(function($post) {
return [
'id' => $post->ID,
'title' => get_the_title($post),
'link' => get_permalink($post),
'type' => get_post_type($post),
'excerpt' => get_the_excerpt($post),
'image' => get_the_post_thumbnail_url($post, 'medium'),
'terms' => array_map(function($term) {
return $term->term_id;
}, wp_get_post_terms($post->ID, get_object_taxonomies($post)))
];
}, $custom_search_filtered_posts);
}
wp_enqueue_script(
'filter-customize',
get_stylesheet_directory_uri() . '/src/js/filter-customize.js',
['jquery'],
filemtime(get_stylesheet_directory() . '/src/js/filter-customize.js'),
true
);
wp_localize_script('filter-customize', 'WP_CPT_DATA', [
'items' => $structured
]);
Суперглобальные массивы
echo $_GET['page']; // доступно в любом месте скрипта
Массив $_GET — это суперглобальный массив, доступный повсюду. Его состояние зависит от запроса пользователя.
Статическое свойство класса (тоже глобальное состояние)
class Config {
public static $debug = true;
}
if (Config::$debug) {
echo "Debug mode on";
}
Статические свойства класса доступны в любом месте кода, если ты подключишь класс. Это тоже форма глобального состояния.
⚠️ Почему Global State может быть опасен
- Сложность отладки: изменение глобального состояния в одной части программы может неожиданно повлиять на другую часть.
- Трудность тестирования: юнит-тесты сложно изолировать, когда код зависит от внешнего состояния.
- Проблемы в больших проектах: глобальные переменные создают сильную связанность между модулями, усложняя поддержку.
✅ Когда использовать Global State
Иногда глобальное состояние — это неизбежно и удобно:
- Работа с
$_SESSION,$_COOKIE - Хранение конфигурации в одном месте (
Configкласс илиenvпеременные) - Глобальные константы вроде
SITE_NAME
📚 Как уменьшить вред от Global State
- Используй DI (Dependency Injection): передавай зависимости явно.
- Прячь глобальное состояние за обёртки (например,
Config::get()вместо прямого доступа к$_ENV). - Используй сервисы и контейнеры зависимостей (например, в Laravel или Symfony).