使用常量作为类名

时间:2013-02-02 13:01:23

标签: php language-construct

我需要使用常量作为类名来访问这个类的静态属性,即

class a {

    public static $name = "Jon";

}

define("CLASSNAME", "a");

echo CLASSNAME::$name;

这会返回错误,该类CLASSNAME不存在。 有一些解决方案吗?

3 个答案:

答案 0 :(得分:5)

可以反思:

class a {

    public static $name = "Jon";

}

define("CLASSNAME", "a");

$obj = new ReflectionClass(CLASSNAME);
echo $obj->getStaticPropertyValue("name");

如果这是一个好的设计选择是另一个问题......

答案 1 :(得分:0)

使用PHP绝对的解除引用:

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

答案 2 :(得分:0)

我正在研究这个问题,因为该类基于必须给出的特定上下文。所以我在课堂上创建了一个函数,它将返回你需要的类,如下所示:

/**
 * 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);来调用它。在您的情况下,您可以在没有&{39; static::'的情况下使用它。或者您想要使用的任何变量。不要忘记实现一些错误处理。