使用作为类名称不变(Use constant as class name)

2019-07-19 03:48发布

我需要使用常量作为类名的存取权限这一类的静态属性,即

class a {

    public static $name = "Jon";

}

define("CLASSNAME", "a");

echo CLASSNAME::$name;

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

Answer 1:

这可能与反思:

class a {

    public static $name = "Jon";

}

define("CLASSNAME", "a");

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

如果它是一个不错的设计选择是另外一个问题...



Answer 2:

使用PHP的提领的绝对混乱:

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


Answer 3:

我一直在寻找这个问题,因为这个类是基于一定的背景下,必须给予。 所以我改变了我的类中的函数将返回你需要像这样的类:

/**
 * 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:: ”或者你想使用的任何变量。 不要忘了执行一些错误处理。



文章来源: Use constant as class name