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

Константы также могут быть объявлены в пределах одного класса. Отличие переменных от констант состоит в том, что при объявлении последних или при обращении к ним не используется символ $. Область видимости констант по умолчанию public.

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

Интерфейсы также могут содержать константы (constants). За примерами обращайтесь к разделу об интерфейсах.

Начиная с PHP 5.3.0, стало возможным обратиться к классу с помощью переменной. Значение переменной не может быть ключевым словом (например, self, parent и static).

Обратите внимание, что константы класса задаются один раз для всего класса, а не отдельно для каждого созданного объекта этого класса.

Пример #1 Объявление и использование константы

<?php
class MyClass
{
    const 
CONSTANT 'значение константы';

    function 
showConstant() {
        echo  
self::CONSTANT "\n";
    }
}

echo 
MyClass::CONSTANT "\n";

$classname "MyClass";
echo 
$classname::CONSTANT "\n"// начиная с PHP 5.3.0

$class = new MyClass();
$class->showConstant();

echo 
$class::CONSTANT."\n"// начиная с PHP 5.3.0
?>

Пример #2 Пример со статичными данными

<?php
class foo {
    
// Начиная с PHP 5.3.0
    
const BAR = <<<'EOT'
bar
EOT;
    
// Начиная с PHP 5.3.0
    
const BAZ = <<<EOT
baz
EOT;
}
?>

Замечание:

Поддержка синтаксиса Heredoc и Nowdoc при инициализации констант была добавлена в версии PHP 5.3.0.

Начиная с PHP 5.5.0 доступна специальная константа ::class, которой на этапе компиляции присваивается полное имя класса. Полезна при использовании с классами, использующими пространства имен.

Пример #3 Пример использования ::class с пространством имен

<?php
namespace foo {
    class 
bar {
    }

    echo 
bar::class; // foo\bar
}
?>

Пример #4 Пример констант, заданных выражением

<?php
const ONE 1;

class 
foo {
    
// Начиная с PHP 5.6.0
    
const TWO ONE 2;
    const 
THREE ONE self::TWO;
    const 
SENTENCE 'Значение константы THREE - ' self::THREE;
}
?>

Для задания констант класса возможно использовать скалярные выражения с цифрами, строками и/или другими константами.

Замечание:

Поддержка константных выражений была добавлена в PHP 5.6.0.

Пример #5 Модификаторы видимости констант класса

<?php
class Foo {
    
// Начиная с PHP 7.1.0
    
public const BAR 'bar';
    private const 
BAZ 'baz';
}
echo 
Foo::BARPHP_EOL;
echo 
Foo::BAZPHP_EOL;
?>

Результат выполнения данного примера в PHP 7.1:

bar

Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …

Замечание:

Начиная с PHP 7.1.0 для констант класса можно использовать модификаторы области видимости.