Мне нужно использовать константу как имя класса для доступа к этому статическому свойству класса, то есть
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::
» или с любой переменной, которую вы хотели бы использовать. Не забудьте выполнить некоторую обработку ошибок.