0

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

Schema.org 具有我只能通过 PHP 接口实现的多重继承层次结构:

interface LocalBusiness extends Organization, Place
{
}

除此之外,schema.org 允许一个对象具有多个独立的类型,例如它可以是 aBook和 a Product,并使用两者的属性:

<!-- 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()can be disabled,这是编写通用库时的问题。

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

4

0 回答 0