![](/img/trans.png)
[英]How to dynamically create an anonymous class that extends an abstract class in PHP?
[英]php anonymous class extends dynamic
你们中的任何人都知道如何在这些代码中获得效果
public function create(SomeInterface $obj)
{
$class = get_class($obj);
return new class extends $class {
//some magic here
}
}
很明显,该代码在 PHP 中不起作用。 $obj
可以是许多不同类的实例。 我想获得一个扩展 $obj 的类的实例。 (它将使我能够重载一些基本方法)
PHP 7+ 非常有可能。 这是一个非常简单的例子:
interface SomeInterface {};
class one implements SomeInterface {};
class two extends one {};
function create(SomeInterface $class) {
$className = get_class($class);
return eval("return (new class() extends $className {});");
}
$newTwoObj = create(new two());
请注意,这将返回匿名对象的新实例。 我不相信有任何方法可以返回对类的引用(未实例化)。
另请注意,这使用了eval()
函数,我通常不会宽恕它,但这是我能够找到动态分配继承的唯一方法(不使用只能使用一次的class_alias()
)。 您需要非常小心,不允许传入未经消毒的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.