我有一个包含类名的字符串。这个类是抽象的,但有一个公共静态方法返回一个子类的实例。
abstract class MyClass {
public static function instance() {
return self::$inst;
}
}
现在我需要以某种方式调用这个方法,我得到的只是类的名称作为字符串。我不能说$class = new $className()
因为 MyClass 是抽象的。有任何想法吗?
我有一个包含类名的字符串。这个类是抽象的,但有一个公共静态方法返回一个子类的实例。
abstract class MyClass {
public static function instance() {
return self::$inst;
}
}
现在我需要以某种方式调用这个方法,我得到的只是类的名称作为字符串。我不能说$class = new $className()
因为 MyClass 是抽象的。有任何想法吗?
我终于找到了一个解决方案——反射。
$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();
但在您的情况下,问题似乎出在您的实例函数中。我猜你试图返回你的抽象类的一个实例,这是不可能的!