- Константы в PHP
- Определение константы PHP
- Пример
- Пример
- Проверка существования констант
- Пример
- Постоянные массивы PHP
- Пример
- Глобальные константы
- Пример
- defined
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- User Contributed Notes 16 notes
- Как проверить константу php
- Оператор const
- Функция define
- Магические константы
- Проверка существования константы
Константы в PHP
Константа PHP противоположна переменной в том смысле, что после определения ее нельзя изменить.
Константы особенно полезны для определения значения, которое вы часто используете, и которое никогда не меняется. Например, вы можете определить константу INCHES_SM_METR, которая содержит количество сантиметров в метре. Поскольку эта величина, которая никогда не меняется, имеет смысл определить её как константу. И наоборот, значение, которое может измениться, например курс доллара к рублю, лучше всего определять как переменную.
Считается, что константы PHP имеют глобальную область действия. Это означает, что после того, как вы определили константу, она становится доступной из любой функции или объекта в вашем коде PHP.
Кроме того, чтобы облегчить жизнь разработчикам, PHP предоставляет ряд встроенных констант, которые доступны для использования.
Определение константы PHP
Вместо использования оператора присваивания (=) , как мы это делали при определении переменных, константы создаются с помощью функции define() . У констант также отсутствует префикс $ для имен переменных.
Функция определения принимает три аргумента:
define(name, value, case-insensitive)
- name — имя, которое вы хотите присвоить константе
- value — значение, которое будет сохранено в константе
- case-insensitive — определяет, является ли константа нечувствительной к регистру. По умолчанию это значение false , т.е. с учетом регистра.
Имена констант чувствительны к регистру. Хотя это не является обязательным требованием, соглашение, перенесенное из других языков программирования, предполагает, что имена констант следует использовать с символами верхнего регистра. В следующем примере демонстрируется использование функции define() для указания константы с именем, чувствительным к регистру:
Пример
define("GREETING", "Добро пожаловать на wm-school.ru!");
echo GREETING;
?>
Обратите внимание, что мы не указали третий параметр при определении константы т.к. его значение по умолчанию false , т.е. с учетом регистра.
Давайте создадим константу с именем без учета регистра:
Пример
define("GREETING", "Добро пожаловать на wm-school.ru!");
echo greeting;
?>
Проверка существования констант
Часто бывает полезно узнать, действительно ли определена константа. Этого можно добиться с помощью функции defined() . Функция defined() принимает имя проверяемой константы в качестве аргумента и возвращает значение true или false , чтобы указать, существует ли эта константа.
Например, предположим, что мы хотим узнать, определена ли константа с именем MY_FIRST_CONSTANT. Мы можем просто вызвать функцию defined() , передавая имя, а затем протестировать результат с помощью оператора if . else (см. Условные операторы PHP для более подробной информации об использовании if . else ) :
Пример
define ('MY_FIRST_CONSTANT', 'wm-school.ru');
if (defined ('MY_FIRST_CONSTANT'))
<
echo "Константа определена"; // выведет "Константа определена"
>
else
<
echo "Константа не определена";
>
?>
Результат выполнения кода:
Постоянные массивы PHP
В PHP7 вы можете создать константу массива с помощью функции defined() :
Пример
define("fruit", [
"apple",
"pear",
"plum"
]);
echo fruit[0];
?>
Результат выполнения кода:
Глобальные константы
Константы автоматически становятся глобальными и могут использоваться во всем скрипте.
В следующем примере константа используется внутри функции не смотря на то, что она определена вне функции:
Пример
define("GREETING", "Добро пожаловать на wm-school.ru!");
function myTest() echo GREETING;
>
myTest();
?>
Результат выполнения кода:
defined
Проверяет существование и наличие значения указанной константы.
Замечание:
Если необходимо узнать о существовании переменной, то используйте isset() , так как defined() применима лишь для констант. Если вам необходимо узнать о существовании функции, то используйте function_exists() .
Список параметров
Возвращаемые значения
Возвращает true , если именованная константа, указанная в параметре constant_name , была определена, false в противном случае.
Примеры
Пример #1 Проверка констант
/* Важно учесть необходимость использования кавычек. Данный пример проверяет,
* является ли строка ‘TEST’ именем константы TEST. */
if ( defined ( ‘TEST’ )) echo TEST ;
>
?php
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’;
// 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 ());
?>
Как проверить константу php
Константы, как и переменные хранят определенное значение, только в отличие от переменных значение констант может быть установлено только один раз, и далее мы уже не можем его изменить. Константы обычно определяются для хранения значений, которые должны оставаться неизменными на протяжении всей работы скрипта.
Оператор const
Для определения константы применяется оператор const , при этом в названии константы знак доллара $ (в отличие от переменных) не используется.
Обычно названия констант используют заглавные символы, но это условность.
После определения константы мы можем ее использовать также, как и обычную переменную.
PHP позволяет устанавливать значения констант на основе вычисляемых выражений:
Единственное исключение — мы не сможем изменить значение константы. То есть выражение PI = 3.1415; , которое должно изменить значение константы, не срабатает.
Функция define
Также для определения константы может применяться функция define() , которая имеет следующую форму:
define(string $name, string $value)
Параметр $name передает название константы, а параметр $value — ее значение. Значение константы может представлять тип int, float, string, bool, null или массивы.
Например, определим числовую константу:
Магические константы
Кроме создаваемых программистом констант в PHP имеется еще несколько так называемых «магических» констант, которые есть в языке по умолчанию:
- __FILE__ : хранит полный путь и имя текущего файла
- __LINE__ : хранит текущий номер строки, которую обрабатывает интерпретатор
- __DIR__ : хранит каталог текущего файла
- __FUNCTION__ : название обрабатываемой функции
- __CLASS__ : название текущего класса
- __TRAIT__ : название текущего трейта
- __METHOD__ : название обрабатываемого метода
- __NAMESPACE__ : название текущего пространства имен
- ::class/span>: полное название текущего класса
Например, выведем текущую выполняемую строку и название файла:
Проверка существования константы
Чтобы проверить, определена ли константы, мы можем использовать функцию bool defined(string $name) . Если константа $name определена, то функция будет возвращать значение true