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

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

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

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

Начиная с PHP 5.3.0, стало возможным обратиться к классу с помощью переменной. Значение переменной не может быть ключевым словом (например, selfparent и 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::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>

 

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

bar

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

Замечание:

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