Intereting Posts
Почта отправлена ​​с использованием формы PHP, отображающей искаженный японский текст Использование ISSET с флажками Есть ли способ увидеть подготовленный запрос, поскольку он будет выполнен в базе данных? Загрузка изображения Silverstripe меняет название Могу ли я / Как … вызвать защищенную функцию вне класса в PHP? Получение полного пути поля загрузки файла в форме в PHP Каков правильный способ документировать PHP-константы (определить) с помощью phpDocumentor Как установить глобальные переменные в OpenCart 2.3.0.2? Обновление дублирующего ключа – несколько столбцов Расшифровать AES от Coldfusion до PHP Примеры построения сервера REST API с использованием Zend Framework? Когда использовать $ this-> свойство вместо $ property в PHP Безопасная загрузка файла в PHP, запрет пользователя без разрешения Настройка обратного прокси-сервера NGINX для веб-сайтов, размещенных на S3 Как сделать SELECT в PHP / MySQL нечувствительным?

Доступ к константе класса с использованием простой переменной, которая содержит имя константы

Я пытаюсь получить доступ к константе класса в одном из моих классов:

const MY_CONST = "value"; 

Если у меня есть переменная, которая содержит имя этой константы, например:

 $myVar = "MY_CONST"; 

Можно ли каким-либо образом получить доступ к значению MY_CONST?

 self::$myVar 

не работает явно, потому что это для статических свойств. Переменные переменные также не работают.

Существует два способа сделать это: использовать постоянную функцию или использовать отражение .

Постоянная функция

Постоянная функция работает с константами, объявленными через define а также константами класса:

 class A { const MY_CONST = 'myval'; static function test() { $c = 'MY_CONST'; return constant('self::'. $c); } } echo A::test(); // output: myval 

Класс отражения

Второй, более кропотливый путь – через размышление:

 $ref = new ReflectionClass('A'); $constName = 'MY_CONST'; echo $ref->getConstant($constName); // output: myval 

Для этого нет синтаксиса, но вы можете использовать явный поиск:

 print constant("classname::$myConst"); 

Я считаю, что он также работает с self:: .

Можно ли каким-либо образом получить доступ к значению MY_CONST?

 self::MY_CONST 

Если вы хотите получить доступ, это динамически, вы можете использовать документы API отражения :

 $myvar = 'MY_CONST'; $class = new ReflectionClass(self); $const = $class->getConstant($myVar); 

Выгода от API отражения может заключаться в том, что вы можете получить все константы сразу ( getConstants ).

Если вам не нравится API отражения, потому что вы не хотите его использовать, альтернативой является constant функция ( Demo ):

 $myvar = 'MY_CONST'; class foo {const MY_CONST = 'bar';} define('self', 'foo'); echo constant(self.'::'.$myvar); 

ты пробовал

 $myVar = MY_CONST or $myVar = $MY_CONST 

Просто примечание для Reflection: конструктор для ReflectionClass должен получить полный путь класса для его параметра. Это означает, что просто установка строки «A» в качестве параметра конструктора может не работать в некоторых случаях.

Чтобы избежать этой проблемы, при использовании ReflectionClass вам будет лучше, если вы это сделаете:

 $classA = new A(); $name_classA = get_class($classA); $ref = new ReflectionClass(get_class($name_classA)); $constName = 'MY_CONST'; echo $ref->getConstant($constName); 

Функция get_class даст вам полный путь к классу всякий раз, когда вы находитесь в коде. Отсутствие полного пути может привести к ошибке PHP, не найденной.