我需要使用常量作为类名来访问此类静态属性,即
class a {
public static $name = "Jon";
}
define("CLASSNAME", "a");
echo CLASSNAME::$name;
这将返回错误,该类CLASSNAME
不存在。有什么解决办法吗?
我需要使用常量作为类名来访问此类静态属性,即
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::
' 或您想使用的任何变量的情况下使用它。不要忘记实现一些错误处理。