Defined: примеры (PHP)
defined(string $constant_name): boolОсновы функции defined
Функция defined в PHP используется для проверки существования указанной константы. Она возвращает true, если константа объявлена, и false в противном случае.
Основное применение функции - проверка определенности констант перед их использованием, что позволяет избежать ошибок выполнения при обращении к несуществующим константам. Это особенно важно при работе с константами, которые могут быть определены в различных конфигурациях или внешних библиотеках.
Функция принимает один обязательный параметр:
bool defined(string $constant_name)
Параметр $constant_name представляет строковое имя проверяемой константы. Имя указывается без символа $ и чувствительно к регистру.
Простые примеры использования
Пример проверки существования пользовательской константы:
define('SITE_NAME', 'MyWebsite');
echo defined('SITE_NAME') ? 'Константа существует' : 'Константа не существует';Константа существует
echo defined('PHP_VERSION') ? 'Версия PHP: ' . PHP_VERSION : 'Константа не определена';Версия PHP: 8.x.x
var_dump(defined('UNDEFINED_CONSTANT'));bool(false)
Похожие функции в PHP
Проверяет существование функции. В отличие от defined, работает с функциями, а не константами.
var_dump(function_exists('array_filter'));bool(true)
Определяет, был ли объявлен класс. Используется для проверки доступности классов перед их инстанцированием.
var_dump(class_exists('DateTime'));bool(true)
Для проверки инициализации переменных используется isset, а не defined. Константы проверяются через defined, переменные - через isset.
$variable = 'test';
echo isset($variable) ? 'Переменная существует' : 'Переменная не существует';Переменная существует
Аналоги в других языках
Defined в Python
В Python нет прямого аналога. Проверка осуществляется через обработку исключений или проверку глобального пространства имен.
try:
print(SOME_CONSTANT)
except NameError:
print('Константа не определена')Константа не определена
Defined в Javascript
В JavaScript проверка существования идентификатора зависит от контекста. Для глобальных переменных можно использовать оператор in.
if ('undefined' !== typeof MY_CONSTANT) {
console.log('Константа существует');
} else {
console.log('Константа не существует');
}Defined в MySQL
В MySQL пользовательские переменные проверяются через IS NOT NULL, но это отличается от проверки констант в PHP.
SET @my_var = 'value';
SELECT IF(@my_var IS NOT NULL, 'Определена', 'Не определена') AS status;Распространенные ошибки
Ошибка при проверке переменной как константы:
$variable = 'test';
echo defined($variable);bool(false)
Использование символа $ в имени константы:
define('MY_CONST', 100);
echo defined('$MY_CONST');bool(false)
Константы по умолчанию чувствительны к регистру:
define('APP_DEBUG', true);
echo defined('app_debug');bool(false)
Изменения в версиях PHP
Функция defined оставалась стабильной в последних версиях PHP. В PHP 8.0 не было внесено изменений в поведение или синтаксис функции. Основные принципы работы сохранены для обратной совместимости.
В ранних версиях PHP функция могла вести себя иначе с регистронезависимыми константами, но в современных версиях поведение унифицировано.
Расширенные примеры применения
Проверка констант с динамически формируемыми именами:
$config_constants = ['DB_HOST', 'DB_USER', 'DB_PASS'];
foreach ($config_constants as $const) {
if (!defined($const)) {
echo "Константа $const не определена\n";
}
}Определение константы только если она не существует:
if (!defined('DEBUG_MODE')) {
define('DEBUG_MODE', false);
}
echo 'Режим отладки: ' . (DEBUG_MODE ? 'включен' : 'выключен');Режим отладки: выключен
Работа с константами внутри классов:
class Config {
const VERSION = '1.0';
}
echo defined('Config::VERSION') ? 'Константа класса определена' : 'Не определена';Константа класса определена
Пример проверки всех необходимых констант конфигурации:
$required_constants = ['API_KEY', 'API_SECRET', 'API_ENDPOINT'];
$missing = [];
foreach ($required_constants as $constant) {
if (!defined($constant)) {
$missing[] = $constant;
}
}
if (!empty($missing)) {
echo 'Не определены константы: ' . implode(', ', $missing);
}