Php 从类名调用抽象类方法

Php 从类名调用抽象类方法,php,abstract-class,Php,Abstract Class,我有一个包含类名称的字符串。这个类是抽象的,但是有一个公共静态方法返回一个子类的实例 abstract class MyClass { public static function instance() { return self::$inst; } } 现在我需要以某种方式调用这个方法,我得到的只是作为字符串的类的名称。我不能说$class=new$className(),因为我的类是抽象的。有什么想法吗?如果您在字符串中有类名,并且希望调用该类的抽象方法,您可以

我有一个包含类名称的字符串。这个类是抽象的,但是有一个公共静态方法返回一个子类的实例

abstract class MyClass {

   public static function instance() {
      return self::$inst;
   }

}

现在我需要以某种方式调用这个方法,我得到的只是作为字符串的类的名称。我不能说
$class=new$className()
,因为我的类是抽象的。有什么想法吗?

如果您在字符串中有类名,并且希望调用该类的抽象方法,您可以执行以下操作:

$className = 'MyClass';
$instance = $className::instance();
$method = "myFunction";
$class =  "myClass";
$result = $class::$method();

我终于找到了解决这个问题的办法——反思

$refClass  = new ReflectionClass('MyClass');
if ($refClass->hasMethod('instance') {
   $refMethod = new ReflectionMethod('MyClass', 'instance');
   $refMethod->invoke(null);
}

我知道我迟到了,但如果有人还在找,请执行以下操作:

$className = 'MyClass';
$instance = $className::instance();
$method = "myFunction";
$class =  "myClass";
$result = $class::$method();
因此,在上述情况下,请使用

$method = "instance";
$class = "myClass"
$instance = $class::$method();

但在您的例子中,问题似乎出在您的实例函数中。我猜您试图返回抽象类的实例,这是不可能的

我意识到你不能为抽象类创建对象。我不需要对象,因为正如我所说的,我想调用一个静态方法。我想调用MyClass::instance(),但我只有一个包含“MyClass”的字符串。抽象类可以通过继承该类来访问。您不能直接调用抽象类方法,这可能是因为您的“MyClass”是抽象的。不能实例化抽象类。如果您想从字符串中的名称创建一个类,我建议您使用
$instance=new$className()或与工厂类似的
$instance=ClassFactory($className)example.ClassFactory。