动态创建实现任意接口的类

时间:2019-05-21 14:18:31

标签: php multiple-inheritance dynamic-class-creation

我正在创建一个PHP库,以从网页中提取schema.org结构化数据。

Schema.org具有multiple inheritance hierarchy,我只能通过PHP接口实现:

interface LocalBusiness extends Organization, Place
{
}

除此之外,schema.org允许对象为multiple independent types,例如,它既可以是Book也可以是Product,并使用这两个属性: / p>

<!-- Uses both the "Book" and "Product" item types -->
<div vocab="http://schema.org/" resource="#record" typeof="Book Product">
...
<span property="author">
...
<span property="sku">

要支持此用例,我需要动态生成实现多个接口的类。在上面的示例中,它看起来像:

new class implements Book, Product
{
  use BookTrait;
  use ProductTrait;
}

我显然不能提前生成所有接口组合,因此我正在考虑一种在运行时生成此类实现的方法。

据我所知,反射不允许做这种事情,所以我唯一想到的方法就是使用生成的代码和eval(),就像模拟库一样。问题是, eval()可以被禁用,这在编写通用库时是一个问题。

我忽略了什么吗? 是否存在另一种动态创建对象的方法,该对象实现了仅在运行时才知道的任意数量的接口?

0 个答案:

没有答案