我正在创建一个 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,这是编写通用库时的问题。
我忽略了什么吗?是否有另一种方法可以动态创建实现任意数量接口的对象,这些接口仅在运行时才知道?