3

我已将要实例化的类存储在可通过 get 和 set 方法访问的变量中:

private $myClass;

public function setClass($myClass) {$this->myClass = $myClass;}
public function getClass() {return $this->myClass;}

现在稍后我想使用 get 方法实例化这个类:

$instance = new $getClass()();

并且还可以使用它的一些静态属性:

$staticAttr = $getClass()::$attr;

但是这两行都会引发错误,我想我已经找到了解决方案,但我真的不确定,我觉得我的问题是对如何做到这一点缺乏基本的了解。或者也许这只是一种糟糕的做法,因此非常气馁?我应该如何最好地解决这个问题?

4

3 回答 3

2

PHP 的语法不允许这样做。为了让这个工作,你只需要先将类名存储到一个变量中:

$class_name = $obj->getClass();
$instance = new $class_name();

访问静态属性也是如此:

$class_name = $obj->getClass();
$staticAttr = $class_name::$attr;
于 2013-04-20T12:26:14.627 回答
1

这是错误的

$instance = new $getClass()();

而是这样做

$getClass = "classname";

$instance = new $getClass();

对于静态函数,请执行此操作

$getClass::getMethod();

对于静态成员

$getClass::$attr;
于 2013-04-20T12:28:52.627 回答
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);
于 2013-04-20T12:32:43.460 回答