从类名调用抽象类方法

时间:2013-09-13 09:05:36

标签: php abstract-class

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

abstract class MyClass {

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

}

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

3 个答案:

答案 0 :(得分:0)

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

$className = 'MyClass';
$instance = $className::instance();

答案 1 :(得分:0)

我终于找到了解决方案 - 反思。

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

答案 2 :(得分:0)

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

$method = "myFunction";
$class =  "myClass";
$result = $class::$method();

所以在上述案例中使用

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

但在您的情况下,问题似乎出现在您的实例函数中。我猜你试图返回抽象类的一个实例,这是不可能的!