我正在使用 ORM 类 - 数据库中的每个表都使用 ORM 类的子类表示。
我正在使用 PHP 接口,我希望在我的一些 ORM 子类中指定需要哪些方法(数据库字段)。向接口添加函数需要在类中显式声明该方法。但是,这些方法依赖于魔术方法来实现实际功能,因为在运行时之前 ORM 不知道 DB 结构。
我想象做的是为每个创建函数,这将返回父类的结果。
考虑:
class ORM
{
// Library code here. Can't change this.
public function __call($name, $arguments)
{
return call_user_func_array(array($this, $method), $arguments);
}
}
interface MyTableInterface
{
public function myDbField();
}
class MyTable extends ORM implements MyTableInterface
{
public function myDbField()
{
return parent::myDbField();
}
}
使用此代码,当我parent::myDbField()
从MyTable
类调用时,它会正确移动到 ORM 类并使用__call
魔法方法。到达这里后,$this
equalsMyTable
会从类中调用原始函数,MyTable
而不是启动它自己的逻辑来从数据库中提取信息。
我怎样才能避免这种递归?