Intereting Posts
Как получить доступ к определенным полям из содержимого JSON с помощью php? PHP & mySQL: простой код для реализации транзакции – фиксация и откат Терминал, передающий аргументы из переменной, содержащей пробелы PHP: Как отобразить изображение по умолчанию, если указанный не существует? PHP __get __set методы php stream_get_contents зависает в конце потока Исключить ботов и пауков из счетчика View в PHP Файл конфигурации yaml для среды выполнения php получить список источников данных ODBC в локальном компьютере с помощью PHP Как вы конвертируете между 12-часовым временем и 24-часовым временем в PHP? Можно ли проинструктировать PHP о настройке постфикса в php.ini? Как пройти путь динамического изображения в Твиттере? В PHP, как PDO защищает от SQL-инъекций? Как работают подготовленные заявления? Ошибка толерантного анализа HTML / XML / SGML в PHP PHP: пример формы, который будет шифровать строку запроса (GET) (скрытие данных, а не безопасность)

Динамическое имя константы в PHP

Я пытаюсь создать постоянное имя динамически, а затем получить значение.

define( CONSTANT_1 , "Some value" ) ; // try to use it dynamically ... $constant_number = 1 ; $constant_name = ("CONSTANT_" . $constant_number) ; // try to assign the constant value to a variable... $constant_value = $constant_name; 

Но я нахожу, что $ constant value по-прежнему содержит NAME константы, а не VALUE.

Я попробовал второй уровень косвенности, а также $$constant_name Но это сделало бы его переменной не константой.

Может кто-нибудь пролить свет на это?

Solutions Collecting From Web of "Динамическое имя константы в PHP"

http://dk.php.net/manual/en/function.constant.php

 echo constant($constant_name); 

И чтобы продемонстрировать, что это тоже работает с константами класса:

 class Joshua { const SAY_HELLO = "Hello, World"; } $command = "HELLO"; echo constant("Joshua::SAY_$command"); 

Чтобы использовать динамические имена констант в своем классе, вы можете использовать функцию отражения (с php5):

 $thisClass = new ReflectionClass(__CLASS__); $thisClass->getConstant($constName); 

Например: если вы хотите отфильтровать только определенные (SORT_ *) константы в классе

 class MyClass { const SORT_RELEVANCE = 1; const SORT_STARTDATE = 2; const DISTANCE_DEFAULT = 20; public static function getAvailableSortDirections() { $thisClass = new ReflectionClass(__CLASS__); $classConstants = array_keys($thisClass->getConstants()); $sortDirections = []; foreach ($classConstants as $constName) { if (0 === strpos($constName, 'SORT_')) { $sortDirections[] = $thisClass->getConstant($constName); } } return $sortDirections; } } var_dump(MyClass::getAvailableSortDirections()); 

результат:

 array (size=2) 0 => int 1 1 => int 2