使用方法访问类并实例化它们

时间:2013-04-20 12:24:05

标签: php class methods get instantiation

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

private $myClass;

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

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

$instance = new $getClass()();

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

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

但是这两条线都会出错,我想我已经找到了解决办法,但我真的不确定,我觉得我的问题是对如何做到这一点的基本缺乏理解。或许这只是可怕的做法而且非常沮丧?我应该如何最好地接近这个?

3 个答案:

答案 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);