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

Php 使用方法访问类并实例化它们,php,class,methods,get,instantiation,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()(); 还可以使用它的一些静态属性: $static

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

private $myClass;

public function setClass($myClass) {$this->myClass = $myClass;}
public function getClass() {return $this->myClass;}
现在,稍后我想使用get方法实例化这个类:

$instance = new $getClass()();
还可以使用它的一些静态属性:

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

但这两条线都有错误,我想我已经找到了解决办法,但我真的不确定,我觉得我的问题是对如何做到这一点缺乏基本的理解。或者,这只是一种可怕的做法,而且非常沮丧?我应该如何处理这个问题呢?

PHP的语法不允许这样做。要使其正常工作,只需先将类名存储到变量:

$class_name = $obj->getClass();
$instance = new $class_name();
访问静态属性也是如此:

$class_name = $obj->getClass();
$staticAttr = $class_name::$attr;
这是错误的

$instance = new $getClass()();
而是这样做

$getClass = "classname";

$instance = new $getClass();
对于静态函数,可以这样做

$getClass::getMethod();
对于静态成员

$getClass::$attr;

将代码调整为工作对象:

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

我有一个“group”类,可以根据需要实例化一整批其他类。我试图对它进行推广,以避免重写任何代码。我觉得这个想法非常糟糕,应该加以劝阻。你应该解释一下你要做什么。我认为涉及的动态访问太多了:一个指向动态实例化对象的动态类名,带有动态访问的静态属性。。。你们的类可能做了太多不同的事情,应该分成几个部分。嗨,斯文,有趣的是你们应该这么说,因为实际上我的整个系统是动态的。我正在研究一种完全面向对象的服务器端方法来呈现网页,但使用单个类“实体”的扩展。目前,它非常粗糙,所以是的,我可能有办法在一个类中进行更多的扩展,它应该被分解,但是基本的“EntityGroup”类只有不到100行,只是作为显示其他实体列表的一种方式。