问题
I need to use constant as class name for acces to this class static property, that is
class a {
public static $name = "Jon";
}
define("CLASSNAME", "a");
echo CLASSNAME::$name;
this returns error, that class CLASSNAME
not exists.
There is some solution ?
回答1:
It's possible with reflection:
class a {
public static $name = "Jon";
}
define("CLASSNAME", "a");
$obj = new ReflectionClass(CLASSNAME);
echo $obj->getStaticPropertyValue("name");
If it is a good design choice is another question...
回答2:
Use PHP's absolute mess of dereferencing:
$CLASSNAME = 'a';
$a::$name;
回答3:
I was looking into this problem because the class is based on a certain context that has to be given. So I made a function in my class that will return the class you require like so:
/**
* 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;
}
Therefore you can call it by using $class = new $this->getClass(static::CLASSNAME);
when you defined a constant within the current class that holds the name of the class you want to instantiate. In your case you can use it without the 'static::
' or with whatever variable you'd like to use. Do not forget to implement some error handling.
来源:https://stackoverflow.com/questions/14662144/use-constant-as-class-name