W3docs

defined()

Функция defined() в PHP проверяет, определена ли константа с заданным именем.

Что делает функция defined()

defined() — встроенная функция PHP, которая проверяет, существует ли уже константа с заданным именем. Она возвращает true, если константа определена, и false, если нет. На этой странице описаны синтаксис функции, способы проверки констант классов и пространств имён, распространённая ошибка — путаница с isset(), — а также случаи, когда действительно нужна эта функция.

Константа — это имя, значение которого не может изменяться в течение одного запроса. Она создаётся с помощью define() или ключевого слова const. Поскольку обращение к неопределённой константе вызывает ошибку (исключение Error в PHP 8+ и предупреждение в более старых версиях), defined() позволяет заранее проверить наличие константы и избежать этого.

Синтаксис

defined(string $constant_name): bool
  • $constant_namestring, содержащая имя константы, которую нужно найти. Обратите внимание: передаётся имя в виде строки ("GREETING"), а не сама константа (GREETING).
  • Возвращает true, если константа с таким именем существует, и false в противном случае.

Передача голой константы вместо её имени — defined(GREETING) — приводит к тому, что PHP сначала пытается вычислить GREETING, что завершится ошибкой, если она не определена. Всегда заключайте имя в кавычки.

Базовый пример

php— editable, runs on the server

Поскольку GREETING была создана строкой выше, defined("GREETING") возвращает true и скрипт выводит Hello, world!.

Проверка констант классов и пространств имён

defined() также работает с константами классов и пространств имён. Используйте полное квалифицированное имя в виде строки:

<?php

const PI = 3.14;

class Circle {
    const SHAPE = "round";
}

var_dump(defined("PI"));             // bool(true)
var_dump(defined("Circle::SHAPE"));  // bool(true)  — class constant
var_dump(defined("Circle::MISSING"));// bool(false) — no such constant
var_dump(defined("UNDEFINED"));      // bool(false)

Для констант класса используется синтаксис "ClassName::CONSTANT_NAME". Для константы пространства имён указывается полный путь, например defined("App\\Config\\VERSION").

defined() и isset(): распространённая путаница

defined() проверяет константы; isset() проверяет переменные (а также ключи массивов и свойства объектов). Эти функции не взаимозаменяемы:

<?php

$name = "Alex";          // a variable
define("APP_NAME", "W3"); // a constant

var_dump(isset($name));        // bool(true)  — variable exists
var_dump(defined("name"));     // bool(false) — no constant called "name"
var_dump(defined("APP_NAME")); // bool(true)  — constant exists

Если вы собираетесь использовать defined("$variable"), скорее всего, вам нужна функция isset().

Когда использовать

  • Защита необязательных конфигурационных констант. Фреймворки нередко позволяют заранее определять константы вроде DEBUG или APP_ENV; используйте defined(), чтобы задать значение по умолчанию только тогда, когда пользователь его не установил.
  • Предотвращение повторного определения. Повторный вызов define() для уже существующей константы генерирует предупреждение, поэтому оберните его: if (!defined("API_KEY")) { define("API_KEY", "..."); }.
  • Обнаружение возможностей. Библиотеки публикуют маркерные константы (например, PHP_VERSION_ID); defined() подтверждает, что функциональность, основанная на константах, доступна, прежде чем на неё полагаться.

Чтобы прочитать значение константы, когда вы знаете, что она существует, используйте defined() вместе с constant(). Для более широкого понимания создания констант обратитесь к разделам PHP Constants и Class Constants.

Практика

Практика
Что делает функция defined() в PHP?
Что делает функция defined() в PHP?
Was this page helpful?