我已经存储了要在可通过get和set方法访问的变量中实例化的类:
private $myClass;
public function setClass($myClass) {$this->myClass = $myClass;}
public function getClass() {return $this->myClass;}
现在稍后我想使用get方法实例化这个类:
$instance = new $getClass()();
并且还使用它的一些静态属性:
$staticAttr = $getClass()::$attr;
但是这两条线都会出错,我想我已经找到了解决办法,但我真的不确定,我觉得我的问题是对如何做到这一点的基本缺乏理解。或许这只是可怕的做法而且非常沮丧?我应该如何最好地接近这个?
答案 0 :(得分:2)
PHP的语法不允许这样做。为了使其正常工作,您只需要首先将类名存储到变量中:
$class_name = $obj->getClass();
$instance = new $class_name();
访问静态属性也是如此:
$class_name = $obj->getClass();
$staticAttr = $class_name::$attr;
答案 1 :(得分:1)
这是错误的
$instance = new $getClass()();
而是这样做
$getClass = "classname";
$instance = new $getClass();
用于静态函数执行此操作
$getClass::getMethod();
对于静态成员
$getClass::$attr;
答案 2 :(得分:0)
将代码调整为工作对象:
class someObject {
private $myClass;
public function setClass($myClass) {$this->myClass = $myClass;}
public function getClass() {return $this->myClass;}
}
样品
$a = new someObject();
$a->setClass(new stdClass());
var_dump($a->getClass());
您可以访问$a->getClass()->property
,了解静态属性:
class Foo {
public static $a = 'bar';
}
$a->setClass(new Foo());
$class = $a->getClass();
var_dump($class::$a);