В руководстве PHP говорится
Как и статические члены, константные значения не могут быть доступны из экземпляра объекта.
что объясняет, почему вы не можете этого сделать
$this->inst = new Classname(); echo $this->inst::someconstant;
но тогда почему это работает?
$this->inst = new Classname(); $inst = $this->inst; echo $inst::someconstant;
Из интерактивной оболочки PHP:
php > class Foo { const A = 'a!'; } php > class Bar { public $foo; } php > $f = new Foo; php > $b = new Bar; php > $b->foo = $f; php > echo $b->foo::A; PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting ',' or ';' in php shell code on line 1
Причина, по которой предыдущий синтаксис терпит неудачу, заключается в том, что парсер PHP не знает, как разрешить двойную двоеточие после ссылки на свойство. Независимо от того, намерено это или нет, неизвестно.
Последний синтаксис работает, потому что он не проходит через свойство напрямую, а через локальную переменную, которую парсер принимает как что-то, с чем он может работать:
php > $inst = $b->foo; php > echo $inst::A; a!
(Кстати, это же ограничение существует для анонимных функций как свойств. Вы не можете называть их напрямую, используя parens, вы должны сначала назначить их другой переменной, а затем вызвать их оттуда. Это было исправлено в сундуке PHP, но Я не знаю, исправили ли они также двойной синтаксис двоеточия.)
Чтобы процитировать руководство:
Начиная с PHP 5.3.0, можно ссылаться на класс, используя переменную. Значение переменной не может быть ключевым словом (например, self, parent и static).
Далее этот пример используется:
$class = new MyClass(); echo $class::constant."\n"; // As of PHP 5.3.0
Таким $inst::someconstant
, предполагается, что работает $inst::someconstant
.
Что касается того, почему $this->inst::someconstant
дает ошибку синтаксического анализа, я не знаю. PHP смешно в некоторых вещах.
Если вы находитесь внутри класса, вы можете получить доступ к константе следующим образом:
self::MY_CONSTANT;
Например:
class MyClass { const MY_CONSTANT = 'constant value'; function showConstant() { echo self::MY_CONSTANT; } }
php поддерживает доступ к константам класса из экземпляра объекта. Ниже приведен код ниже (проверено в phpv5.5.5) :
<?php class superheroes{ const kal_el = 'Superman'; } $instance = new superheroes; echo $instance::kal_el;
Источник: http://dwellupper.io/post/48/defining-class-constants-in-php