Разница между конструкциями на PHP - Сергей Житников: Web-разработчик

Разница между конструкциями на PHP

В статье расписал разницу между популярными конструкциями, которые часто используются на PHP.

global и $_GLOBALS

Разница между ключевым словом globalи суперглобальной переменной $_GLOBALSзаключается в следующем.

  1. global— является ключевым словом, а $_GLOBALS — не является, это суперглобальная переменная;
  2. globalиспользуется только внутри функций для обращения к глобальным переменным из внешнего контекста функции. Использовать же $_GLOBALS можно, она будет правильно работать.

Общая логика использования global и $_GLOBALS

  1. global:
    • global — это ключевое слово в PHP, которое используется внутри функций для обращения к глобальным переменным из внешнего контекста функции.
    • Когда вы используете global $variableName; внутри функции, это означает, что вы хотите использовать глобальную переменную с именем $variableName, определенную во внешней области видимости.
    • Использование global позволяет изменять значение глобальной переменной изнутри функции.
  2. $_GLOBALS:
    • $_GLOBALS является глобальным ассоциативным массивом в PHP, который содержит все глобальные переменные скрипта, доступные из любой области видимости.
    • Переменные в массиве $_GLOBALS доступны из любой части кода без использования ключевого слова global.
    • Чтение и изменение значений переменных в $_GLOBALS может быть осуществлено без использования ключевого слова global, но это обычно не рекомендуется из-за потенциальных проблем с областью видимости и возможностью переопределения переменных случайно.

Кратко говоря, global используется внутри функций для доступа к глобальным переменным, тогда как массив $_GLOBALS содержит все глобальные переменные и доступен из любой части кода


Если вы используете ключевое слово global вне функции, прямо в глобальной области скрипта в PHP, скрипт будет выполняться без ошибок, но такое использование global вне функций абсолютно бессмысленно, так как globalпредназначен для работы с глобальными переменными внутри функций. Это не вызовет ошибки, но также не будет иметь эффекта на переменные, потому что они по определению уже являются глобальными в этой области.

Пример использования global в глобальной области, который не приведет к ошибкам, но не имеет смысла:

$globalVar = 'Hello';
global $globalVar;
echo $globalVar; // Выведет: Hello

Пример правильного использования конструкций в глобальной области видимости:

$_GLOBALS['globalVar'] = 'Hello';
echo $_GLOBALS['globalVar']; // Выведет: Hello

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

const и define()

Ключевое слово const появилось в PHP версии 5.3. До этого константы можно было объявлять только с помощью define(). Но в const нельзя передавать скаляры 

Создание констант в PHP version < 5.3

// скаляры
define( 'FOO', 10 );
define( 'FOO', 10.9 );
define( 'FOO', 'val' );
define( 'FOO', true );

// не скаляры
define( 'FOO', array(1) );          // константа не установиться и получим Warning
define( 'FOO', (object) array(1) ); // константа не установиться и получим Warning

Создание констант в PHP version 5.3 — 5.6

Теперь можно указывать в значения const примитивные PHP выражения (выражения, состоящие из скаляров):

const FOO = 1 + 2;
const FOO = 'foo' . 'bar';

Также появилась возможность сохранять в константах массивы:

const FOO = [3, 4, 5];      // работает
define( 'FOO', [3, 4, 5] ); // работает, начиная с PHP v.7.0

Разница между const и define()

  1. Константы с использованием constдолжны быть объявлены в верхней области видимости. То есть, не допускается объявление констант внутри функций/циклов/выражений if или try/catch блоков if ( 1 ) { const NAME = 'VALUE'; // не работает } // но if ( 1 ) { define( 'NAME', 'VALUE' ); // работает }
  2. const всегда регистрозависима. define()— регистронезависима. define( 'NAME', 'VALUE', true ); echo NAME; // VALUE echo name; // VALUE const NAME1 = 'VALUE'; echo name1 // Константы не существует
  3. const понимает только скаляры, массивы и выражения из примитивов. Но define() можно передать переменные, функции, выражения const FOO = $var; // Parse error const FOO = home_url(); // Parse error define( 'FOO', $var ); // нет ошибок define( 'FOO', home_url() ); // нет ошибок С версии PHP 5.6 в const также можно указывать примитивные выражения и массивы, а не только скаляры.
  4. const может хранить массивы с версии PHP 5.6, а define с PHP 7.0 const FOO = [1, 2, 3]; // работает с PHP 5.6 define( 'FOO', [1, 2, 3] ); // работает с PHP 7.0
  5. const зависит от пространства имен, а define нет.
    То есть, если создать константу в каком-либо namespace, то:
    • При использовании const— константа будет находится в этом пространстве и не будет доступна вне его.
    • При использовании define— константа регистрируется как глобальная и будет доступна за пределами namespace.

Итог.Определять константу почти всегда лучше с помощью define(), потому что тут больше возможностей и меньше вариантов «поймать» ошибку. Исключения:

  • У вас версия PHP 5.6 и вам нужно сохранить массив в константу, тут поможет const.
  • Вам нужно, чтобы константа была не в глобальной видимости, а в видимости пространства имен (namespace).

isset() и empty()

Выражениеisset($a)empty($a)
unset($a)falsetrue
$a = nullfalsetrue
$a = 0truetrue
$a = «»truetrue
$a = array()truetrue
$a = falsetruetrue
$a  = truetruefalse
$a = 7truefalse

echo(), print(), print_r(), var_dump()

Эти функции (конструкции) в PHP имеют некоторые отличия:

  • echo(): Это не функция, а конструкция языка. Она используется для вывода одного или более строковых значений. Можно использовать несколько аргументов через запятую для вывода. echo не возвращает значение. Скобки не требуются, т.к. это не функция, а языковая конструкция.
  • print(): Также является конструкцией языка и используется для вывода строки. print() всегда возвращает 1, поэтому её можно использовать в выражениях. Конструкция принимает только один аргумент. Так как это не функция, а языковая конструкция, скобки после print() не требуются.
  • print_r(): Эта функция используется для вывода информации о переменной в удобочитаемом формате. Она предназначена для отладки и обычно используется для вывода массивов. print_r() отображает значение переменной, структуру и типы данных.
  • var_dump(): Эта функция также используется для вывода информации о переменной, но более подробно. Она отображает значение переменной, её тип и длину, структуру и значения всех элементов в массивах и объектах.

Таким образом, echo() и print() предназначены для вывода простых строк, в то время как print_r() и var_dump() полезны для вывода значений переменных в удобочитаемом и более детальном виде для отладки.

Сергей Житников
Об авторе

Сергей Житников - Веб-разработчик

Занимаюсь веб-разработкой более 5 лет. Специализируюсь на создании адаптивных сайтов и веб-приложений на HTML5, CSS3 и JavaScript. Работаю с популярными CMS и фреймворками, а также уделяю большое внимание оптимизации производительности и чистоте кода.

Есть проект или идея? Буду рад помочь!

Связаться со мной

Последние статьи

19.06.2026
В статье собрал шпаргалку по основным компонентам Bitrix: bitrix:menu, news.list, news.detail, sale.basket.basket.line, main.include и breadcrumb. Разобрал настройку меню из разделов и элементов инфоблока через файлы .menu_ext.php, показываю полные конфигурации компонентов с пояснениями ключевых параметров. Готовые примеры для быстрого копирования и использования в проектах.
19.06.2026
Купоны в Битрикс неразрывно связаны с правилами работы с корзиной — без привязки к правилу они не сработают, а правило без купонов применит скидку на все товары. Разбираю создание купонов через DiscountCouponTable::add(): обязательные и опциональные поля, типы купонов, флаги активности. Показываю примеры работы с датами через объект DateTime (прибавление дней, месяцев и минут).
19.06.2026
Разбираю готовые примеры работы с изображениями в PHP: сохранение на сервер, вывод в браузер, рисование линий и прямоугольников. Отдельно — нюансы с форматами файлов (JPEG/PNG) и поддержкой кириллицы через шрифты.