0

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

abstract class MyClass {

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

}

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

4

3 回答 3

0

我终于找到了一个解决方案——反射。

$refClass  = new ReflectionClass('MyClass');
if ($refClass->hasMethod('instance') {
   $refMethod = new ReflectionMethod('MyClass', 'instance');
   $refMethod->invoke(null);
}
于 2013-09-13T12:48:56.960 回答
0

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

$className = 'MyClass';
$instance = $className::instance();
于 2013-09-13T09:13:09.297 回答
0

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

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

所以在提到的情况下使用

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

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

于 2015-08-28T08:55:08.833 回答