Php if not defined constant

PHP
Константы

Константы используются для хранения значений, которые не должны быть изменены позже. Они также часто используются для хранения параметров конфигурации, особенно тех, которые определяют среду (dev / production).

Константы имеют такие типы, как переменные, но не все типы могут использоваться для инициализации константы. Объекты и ресурсы не могут использоваться как значения для констант вообще. Массивы могут использоваться как константы, начиная с PHP 5.6

Некоторые постоянные имена зарезервированы PHP. К ним относятся true , false , null а также многие константы, специфичные для модуля.

Константы обычно называются с использованием прописных букв.

Проверка константы

Простая проверка

Чтобы проверить, определена ли константа, используйте defined функцию. Обратите внимание, что эта функция не заботится о значении константы, она заботится только о том, существует ли константа или нет. Даже если значение константы равно null или false функция все равно вернет true .

Обратите внимание, что константа становится «видимой» в вашем коде только после строки, в которой вы ее определили:

 define("GOOD", false); if (defined("GOOD")) < print "GOOD is defined"; // prints "GOOD is defined" >

Получение всех определенных констант

Чтобы получить все определенные константы, в том числе созданные PHP, используйте функцию get_defined_constants :

Чтобы получить только те константы, которые были определены вашим приложением, вызовите функцию в начале и в конце вашего скрипта (обычно после процесса начальной загрузки):

Иногда это полезно для отладки

Определение констант

Константы создаются с помощью инструкции const или функции define . Соглашением является использование букв UPPERCASE для постоянных имен.

Определить константу с использованием явных значений

const PI = 3.14; // float define("EARTH_IS_FLAT", false); // boolean const "UNKNOWN" = null; // null define("APP_ENV", "dev"); // string const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok const APP_LANGUAGES = ["de", "en"]; // arrays define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays 

Определить константу с использованием другой константы

если у вас есть одна константа, вы можете определить другую на основе этого:

const TAU = PI * 2; define("EARTH_IS_ROUND", !EARTH_IS_FLAT); define("MORE_UNKNOWN", UNKNOWN); define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // string manipulation is ok too // the above example (a function call) does not work with const: // const TIME = time(); # fails with a fatal error! Not a constant scalar expression define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60); const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // array manipulations define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"], APP_BETTER_LANGUAGES)); 

Зарезервированные константы

Некоторые константные имена зарезервированы PHP и не могут быть переопределены. Все эти примеры потерпят неудачу:

define("true", false); // internal constant define("false", true); // internal constant define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded 
Constant . already defined in . 

Условные определения

Если у вас есть несколько файлов, где вы можете определить одну и ту же переменную (например, вашу основную конфигурацию, а затем локальную конфигурацию), следующий синтаксис может помочь избежать конфликтов:

defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined" 

const vs define

define — это выражение времени выполнения, а const — время компиляции.

Читайте также:  Mac and java security

Таким образом, define позволяет использовать динамические значения (т. Е. Вызовы функций, переменные и т. Д.) И даже динамические имена и условное определение. Тем не менее он всегда определяет относительно корневого пространства имен.

const является статичным (как в случае допускаются только операции с другими константами, скалярами или массивами и только ограниченный набор из них, так называемые константные скалярные выражения , то есть арифметические, логические и операторы сравнения, а также разыменование массива), но они автоматически являются пространством имен с префиксом текущего активного пространства имен.

const поддерживает только другие константы и скаляры как значения, а не операции.

Константы классов

Константы могут быть определены внутри классов с использованием ключевого слова const .

class Foo < const BAR_TYPE = "bar"; // reference from inside the class using self:: public function myMethod() < return self::BAR_TYPE; >> // reference from outside the class using :: echo Foo::BAR_TYPE; 

Это полезно для хранения типов предметов.

 > $logger = new Logger(); $logger->log("Info"); // Using default value $logger->log("Warning", $logger::LEVEL_WARNING); // Using var $logger->log("Error", Logger::LEVEL_ERROR); // using class 

Постоянные массивы

Массивы могут использоваться как простые константы и константы класса из версии PHP 5.6 и далее:

Пример константы класса

class Answer < const C = [2,4]; >print Answer::C[1] . Answer::C[0]; // 42 

Пример простой константы

const ANSWER = [2,4]; print ANSWER[1] . ANSWER[0]; // 42 

Также из версии PHP 7.0 эта функция была перенесена на функцию define для простых констант.

define('VALUES', [2, 3]); define('MY_ARRAY', [ 1, VALUES, ]); print MY_ARRAY[1][1]; // 3 

Использование констант

Чтобы использовать константу, просто используйте ее имя:

if (EARTH_IS_FLAT) < print "Earth is flat"; >print APP_ENV_UPPERCASE; 

или если вы заранее не знаете имя константы, используйте constant функцию:

// this code is equivalent to the above code $const1 = "EARTH_IS_FLAT"; $const2 = "APP_ENV_UPPERCASE"; if (constant($const1)) < print "Earth is flat"; >print constant($const2); 
  • Начало работы с PHP
  • APCu
  • BC Math (бинарный калькулятор)
  • Imagick
  • IMAP
  • JSON
  • Loops
  • PDO
  • PHP MySQLi
  • php mysqli affected rows возвращает 0, когда он должен возвращать положительное целое число
  • PHP Встроенный сервер
  • PHPDoc
  • PSR
  • SimpleXML
  • SQLite3
  • Streams
  • URL-адрес
  • UTF-8,
  • WebSockets
  • XML
  • YAML в PHP
  • Автозагрузка грунтовки
  • Альтернативный синтаксис для структур управления
  • Анализ HTML
  • Асинхронное программирование
  • Аутентификация HTTP
  • Безопасность
  • Буферизация вывода
  • Вклад в PHP Core
  • Внедрение зависимости
  • Внесение изменений в Руководство по PHP
  • Волшебные константы
  • Волшебные методы
  • Вывод значения переменной
  • Выполнение по массиву
  • Генераторы
  • закрытие
  • Защитите Remeber Me
  • Интерфейс командной строки (CLI)
  • Использование cURL в PHP
  • Использование MongoDB
  • Использование Redis с PHP
  • Использование SQLSRV
  • Итерация массива
  • Как определить IP-адрес клиента
  • Как разбить URL-адрес
  • Класс Datetime
  • Классы и объекты
  • Клиент SOAP
  • Комментарии
  • Компилировать расширения PHP
  • Компиляция ошибок и предупреждений
  • Константы
  • Контрольные структуры
  • криптография
  • кэш
  • локализация
  • Манипулирование массивом
  • Манипуляции заголовков
  • Массивы
  • Машинное обучение
  • Менеджер зависимостей композитора
  • Многопоточное расширение
  • многопроцессорная обработка
  • Монго-PHP
  • Область переменных
  • Обработка изображений с помощью GD
  • Обработка исключений и отчетов об ошибках
  • Обработка нескольких массивов вместе
  • Обработка файлов
  • Общие ошибки
  • операторы
  • отладка
  • Отправка электронной почты
  • отражение
  • переменные
  • Переменные Superglobal PHP
  • Печенье
  • Поддержка Unicode в PHP
  • Пространства имен
  • Работа с датами и временем
  • Развертывание докеров
  • Регулярные выражения (regexp / PCRE)
  • Рекомендации
  • Рецепты
  • Розетки
  • Сервер SOAP
  • Сериализация
  • Сериализация объектов
  • сессии
  • Соглашения о кодировании
  • Создание PDF-файлов в PHP
  • Спектакль
  • Строковый анализ
  • Структуры данных SPL
  • Тестирование устройства
  • Тип жонглирования и нерегулярные проблемы сравнения
  • Тип подсказки
  • Типы
  • Установка в средах Linux / Unix
  • Установка среды PHP в Windows
  • Фильтры и функции фильтра
  • Форматирование строк
  • функции
  • Функции хеширования пароля
  • Функциональное программирование
  • Черты
  • Чтение данных запроса
  • Шаблоны проектирования
Читайте также:  Can python read xlsx

Источник

defined

Проверяет существование и наличие значения указанной константы.

Замечание:

Если необходимо узнать о существовании переменной, то используйте isset() , так как defined() применима лишь для констант. Если вам необходимо узнать о существовании функции, то используйте function_exists() .

Список параметров

Возвращаемые значения

Возвращает true , если именованная константа, указанная в параметре constant_name , была определена, false в противном случае.

Примеры

Пример #1 Проверка констант

/* Важно учесть необходимость использования кавычек. Данный пример проверяет,
* является ли строка ‘TEST’ именем константы TEST. */
if ( defined ( ‘TEST’ )) echo TEST ;
>

interface bar const test = ‘foobar!’ ;
>

class foo const test = ‘foobar!’ ;
>

var_dump ( defined ( ‘bar::test’ )); // bool(true)
var_dump ( defined ( ‘foo::test’ )); // bool(true)

Пример #2 Проверка вариантов перечисления (начиная с PHP 8.1.0)

enum Suit
case Hearts ;
case Diamonds ;
case Clubs ;
case Spades ;
>

var_dump ( defined ( ‘Suit::Hearts’ )); // bool(true)

Смотрите также

  • define() — Определяет именованную константу
  • constant() — Возвращает значение константы
  • get_defined_constants() — Возвращает ассоциативный массив с именами всех констант и их значений
  • function_exists() — Возвращает true, если указанная функция определена
  • Смотрите раздел Константы

User Contributed Notes 16 notes

My preferred way of checking if a constant is set, and if it isn’t — setting it (could be used to set defaults in a file, where the user has already had the opportunity to set their own values in another.)

defined ( ‘CONSTANT’ ) or define ( ‘CONSTANT’ , ‘SomeDefaultValue’ );

// Checking the existence of a class constant, if the class is referenced by a variable.

class Class_A
const CONST_A = ‘value A’;
>

// When class name is known.
if ( defined( ‘Class_A::CONST_A’ ) )
echo ‘Class_A::CONST_A defined’;

// Using a class name variable. Note the double quotes.
$class_name = Class_A::class;
if ( defined( «$class_name::CONST_A» ) )
echo ‘$class_name::CONST_A defined’;

Читайте также:  Php function new line

// Using an instantiated object for a variable class.
$object_A = new $class_name();
if ( defined( get_class($object_A).’::CONST_A’ ) )
echo ‘$object_A::CONST_A defined’;

Before using defined() have a look at the following benchmarks:

true 0.65ms
$true 0.69ms (1)
$config[‘true’] 0.87ms
TRUE_CONST 1.28ms (2)
true 0.65ms
defined(‘TRUE_CONST’) 2.06ms (3)
defined(‘UNDEF_CONST’) 12.34ms (4)
isset($config[‘def_key’]) 0.91ms (5)
isset($config[‘undef_key’]) 0.79ms
isset($empty_hash[$good_key]) 0.78ms
isset($small_hash[$good_key]) 0.86ms
isset($big_hash[$good_key]) 0.89ms
isset($small_hash[$bad_key]) 0.78ms
isset($big_hash[$bad_key]) 0.80ms

PHP Version 5.2.6, Apache 2.0, Windows XP

Each statement was executed 1000 times and while a 12ms overhead on 1000 calls isn’t going to have the end users tearing their hair out, it does throw up some interesting results when comparing to if(true):

1) if($true) was virtually identical
2) if(TRUE_CONST) was almost twice as slow — I guess that the substitution isn’t done at compile time (I had to double check this one!)
3) defined() is 3 times slower if the constant exists
4) defined() is 19 TIMES SLOWER if the constant doesn’t exist!
5) isset() is remarkably efficient regardless of what you throw at it (great news for anyone implementing array driven event systems — me!)

May want to avoid if(defined(‘DEBUG’)).

You can use the late static command «static::» withing defined as well. This example outputs — as expected — «int (2)»

abstract class class1
<
public function getConst ()
<
return defined ( ‘static::SOME_CONST’ ) ? static:: SOME_CONST : false ;
>
>

final class class2 extends class1
<
const SOME_CONST = 2 ;
>

var_dump ( $class2 -> getConst ());
?>

Источник

Оцените статью