Use constant as class name

北战南征 提交于 2019-11-28 07:49:59

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!