Intereting Posts
Как отступить к совершенно другой странице индекса, если пользователь отключил javascript? Как создать уникальные переменные URL, которые соответствуют записи db? Почему Magento не смог сохранить клиента после создания идентификатора? Yii: отношение n: m по обе стороны от AR mod_rewrite VS относительные пути Есть ли хорошая реализация частичной загрузки файлов в PHP? PHP-скрипт имеет дополнительный 0 в конце вывода на сотовое соединение php запускается один раз и дважды вставляет в базу данных mysql Как получить последние видео с нескольких каналов Youtube в одном API-интерфейсе Как программно применить купон в Woocommerce для первого заказа, сделанного клиентом? Symfony – аннотация никогда не была импортирована PHP: YouTube v3 API Captions Upload with Sync Flag PHP – удалить последний символ файла Получение результата из процедуры в laravel – удаление квадратных скобок из ответа Обновление базы данных DBD для Zend

Использовать константу как имя класса

Мне нужно использовать константу как имя класса для доступа к этому статическому свойству класса, то есть

class a { public static $name = "Jon"; } define("CLASSNAME", "a"); echo CLASSNAME::$name; 

это возвращает ошибку, что класс CLASSNAME не существует. Есть какое-то решение?

    Это возможно с отражением:

     class a { public static $name = "Jon"; } define("CLASSNAME", "a"); $obj = new ReflectionClass(CLASSNAME); echo $obj->getStaticPropertyValue("name"); 

    Если это хороший выбор дизайна, это еще один вопрос …

    Используйте полный беспорядок разыменования PHP:

     $CLASSNAME = 'a'; $a::$name; 

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

     /** * Instantiate a class by class name in variable * * @param string $className The name of the class * @return mixed The instantiated class */ protected function getClass($className) { return new $className; } 

    Поэтому вы можете вызвать его, используя $class = new $this->getClass(static::CLASSNAME); когда вы определили константу в текущем классе, которая содержит имя класса, который вы хотите создать. В вашем случае вы можете использовать его без « static:: » или с любой переменной, которую вы хотели бы использовать. Не забудьте выполнить некоторую обработку ошибок.