我正在研究一个简单的 ORM 解决方案并且遇到了一个棘手的情况。理想情况下,我希望能够在静态上下文和对象上下文中使用方法,具体取决于它的调用方式。我不确定这是否可能,但这就是我的意思:
假设一个用户模型想要静态调用 where(),这目前工作正常,例如:
$user = User::where('id = ?', 3);
现在,我也支持关系,例如用户可以有消息。建立这种关系后,我只需将消息模型的空白副本存储在用户模型中并设置外键。例如:
$user -> messages = new Message();
$user -> messages -> foreign_key = 'user_id';
现在,理想情况下,我希望能够调用:
$user -> messages -> where('unread = ?', 1);
在非静态上下文中并在此上下文中使用 $this -> foreign_key 以便仅提取外键与用户 ID 匹配的消息。这种类型的上下文切换在 PHP 中是可能的吗?从静态上下文中对 $this 的任何引用都会引发错误,因为它是一个静态方法,并且不应依赖于 $this(出于显而易见的原因,当从静态上下文中调用时,$this 将不存在)
有什么聪明的方法可以解决这个问题吗?我尝试重载该方法以拥有两个不同的原型,有和没有 static 关键字,但这引发了重新声明错误。