Я прочитал, что я мог найти по этому вопросу, но я в значительной степени озадачен отсутствием альтернатив. Если у вас есть проект ООП в PHP, использование consts настолько уродливо, насколько это возможно. Вот проблема:
class Invisible {
CONST youCantSeeMe = "";
}
class Ugly {
$invisible;
static $invisible2;
function __construct() {
$this->$invisible = new Invisible();
self::$invisible2 = New Invisible();
$this->invisible::youCantSeeMe; (illegal, crashes project)
self::$invisible2::youCantSeeMe; (illegal, crashes project)
}
function uglyFunction() {
//this is the only, ugly way to do it
$invisible = $this->invisible;
$invisible::youCantSeeMe (this works)
}
}
Единственный другой способ, который я нашел, это сделать публичный доступ к каждому констату, который у вас есть (громоздкий, трата времени), или с помощью волшебного __get, используя класс отражения (дорого).
Должен ли быть лучший способ, чем эти варианты?
Я считаю, что ваша жалоба действительно связана с неполная поддержка разыменования.
::
принимает только простые ссылочные переменные с левой стороны
Это исправлено в Единый переменный синтаксис RFC который реализован в PHP 7.
Других решений пока нет …