Constant: примеры (PHP)

Функция constant в PHP: получение значения констант
Раздел: Работа с константами
constant(string $name): mixed

Функция constant в PHP

Функция constant() в языке PHP предназначена для получения значения константы по её имени, переданному в виде строки. Этот механизм полезен в ситуациях, когда имя константы формируется динамически во время выполнения скрипта.

Когда используется функция
  • Когда имя константы хранится в переменной или получается в результате работы другого кода.
  • Для повышения гибкости кода, где обращение к константам зависит от условий.
  • При работе с константами, чьи имена генерируются автоматически.
Аргументы функции

Функция принимает один обязательный параметр:

  • $name (string) – строка, содержащая имя константы. Чувствительна к регистру.

Функция возвращает значение константы. Если константа с указанным именем не определена, генерируется ошибка уровня E_WARNING и возвращается null (начиная с PHP 8.0.0, в более ранних версиях могло генерироваться E_NOTICE).

Базовые примеры использования

Получение значения простой константы
<?php
define('SITE_NAME', 'MyWebsite');
$constantName = 'SITE_NAME';
echo constant($constantName);
?>
MyWebsite
Попытка получить неопределенную константу
<?php
$result = constant('UNDEFINED_CONST');
var_dump($result);
?>
Warning: constant(): Couldn't find constant UNDEFINED_CONST in ...
NULL
Работа с константами классов
<?php
class MyClass {
    public const STATUS = 'active';
}
$const = 'MyClass::STATUS';
echo constant($const);
?>
active

Похожие функции в PHP

Прямое обращение по имени

Константу можно получить напрямую, если её имя известно на этапе написания кода.

<?php
define('VERSION', '8.0');
echo VERSION; // Проще и быстрее, чем constant('VERSION')
?>
Функция defined()

Проверяет, определена ли константа, но не возвращает её значение. Часто используется в паре с constant().

<?php
if (defined('DEBUG_MODE')) {
    $mode = constant('DEBUG_MODE');
}
?>
Магическая константа __CLASS__

Это предопределённые константы, которые меняют значение в зависимости от контекста. Их нельзя получить через constant().

Когда что использовать: Прямое обращение – когда имя константы известно. constant() – для динамического имени. defined() – для проверки существования.

Аналоги в других языках

Constant в Python

В Python нет отдельной функции. Константы – это просто переменные, а для динамического доступа используют globals() или getattr() для атрибутов модуля/класса.

import sys
# Аналог через глобальную область видимости
MY_CONST = 100
name = 'MY_CONST'
print(globals().get(name))
100

Constant в Javascript

В JS константы объявляются через const. Для динамического достава к глобальным константам можно использовать window (в браузере) или globalThis.

// В глобальной области видимости (браузер)
const MAX_SIZE = 1024;
let constName = 'MAX_SIZE';
console.log(window[constName]); // Работает для var, но не для const/let
// Более надежный способ - использовать объект для хранения констант.
const CONSTANTS = { MAX_SIZE: 1024 };
console.log(CONSTANTS[constName]);
1024

Constant в MySQL

В MySQL есть системные переменные (например, @@version), но нет точного аналога. Динамический SQL (подготовленные выражения) позволяет подставлять имена объектов.

-- Нет прямого аналога constant().
-- Имена переменных должны быть известны на этапе написания запроса.
SET @my_var = 10;
SELECT @my_var;

Типичные ошибки

Ошибка при отсутствии константы

Вызов функции для несуществующей константы вызывает предупреждение.

<?php
// Неправильно: нет проверки
$value = constant('USER_ROLE'); // Warning, если константа не определена

// Правильно: предварительная проверка
if (defined('USER_ROLE')) {
    $value = constant('USER_ROLE');
} else {
    $value = 'default';
}
?>
Чувствительность к регистру
<?php
define('PATH', '/tmp');
echo constant('path'); // Не найдено, регистр имеет значение
?>
Warning: constant(): Couldn't find constant path in ...
NULL
Передача не строкового аргумента
<?php
// До PHP 8
$arr = ['MY_CONST'];
echo constant($arr[0]); // Работало, так как stringable

// В PHP 8+ тип аргумента строго string
$num = 123;
echo constant($num); // TypeError
?>

Изменения в PHP 8

Строгая типизация параметра

В PHP 8.0 параметр $name функции constant() имеет тип string. Передача значения другого типа вызывает TypeError. Ранее нестроковые значения преобразовывались в строку.

<?php
// PHP 7
$obj = new class { public function __toString() { return 'TEST'; }};
echo constant($obj); // Работало, если был метод __toString

// PHP 8
// constant($obj); // TypeError: constant(): Argument #1 ($name) must be of type string
?>
Уровень ошибки для неопределенных констант

В PHP 8.0.0 ошибка при поиске несуществующей константы изменилась с E_NOTICE на E_WARNING.

Расширенные примеры

Динамический выбор набора констант
Пример php
<?php
define('COLOR_RED', '#FF0000');
define('COLOR_GREEN', '#00FF00');
define('COLOR_BLUE', '#0000FF');

function getThemeColor($theme) {
    $constName = 'COLOR_' . strtoupper($theme);
    return defined($constName) ? constant($constName) : '#FFFFFF';
}

echo getThemeColor('red') . "\n";
echo getThemeColor('unknown');
?>
#FF0000
#FFFFFF
Работа с пространствами имен (namespaces)
Пример php
<?php
namespace MyProject\Settings {
    define('MyProject\Settings\MAX_LOG', 100);
}
namespace {
    $fullConstName = 'MyProject\Settings\MAX_LOG';
    echo constant($fullConstName);
}
?>
100
Использование в комбинации с class_constants
Пример php
<?php
class Logger {
    public const LEVEL_ERROR = 1;
    public const LEVEL_WARNING = 2;
    public const LEVEL_INFO = 3;
}

function logMessage($message, $levelType) {
    $constName = 'Logger::LEVEL_' . strtoupper($levelType);
    $level = constant($constName);
    if ($level === null) {
        $level = Logger::LEVEL_INFO;
    }
    echo "Уровень $level: $message\n";
}

logMessage('Системная ошибка', 'ERROR');
logMessage('Неизвестный тип', 'DEBUG');
?>
Уровень 1: Системная ошибка
Уровень 3: Неизвестный тип
Кэширование значений констант для производительности
Пример php
<?php
// Если constant() вызывается часто в цикле с одним именем
$configCache = [];
function getConfigConst($name) {
    global $configCache;
    if (!array_key_exists($name, $configCache)) {
        $configCache[$name] = defined($name) ? constant($name) : null;
    }
    return $configCache[$name];
}

// Пример использования
for ($i = 0; $i < 10000; $i++) {
    $val = getConfigConst('SOME_HEAVY_CONST'); // Вызов defined/constant один раз
}
?>

PHP constant function comments

En
Constant Returns the value of a constant