【问题标题】:php anonymous class extends dynamicphp匿名类扩展动态
【发布时间】:2017-08-15 01:36:29
【问题描述】:

你们中的任何人都知道如何在这些代码中产生效果

 public function create(SomeInterface $obj)
 {
     $class = get_class($obj);
     return new class extends $class {
        //some magic here
     }
 }

很明显,代码在 PHP 中不起作用。 $obj 可以是许多不同类的实例。我想获得一个扩展 $obj 的类的实例。 (它会让我有能力重载一些基本方法)

【问题讨论】:

标签: php anonymous-class extending-classes


【解决方案1】:

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()一次)。您需要非常小心,不允许传入未经处理的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多