为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel Eloquent - 从子模型访问父模型返回子模型

Laravel Eloquent - 从子模型访问父模型返回子模型

PHP
摇曳的蔷薇 2021-10-22 10:58:50
扩展 Eloquent 模型似乎是人们所做的事情。我有一个有趣的问题:文件库namespace App\Models;use Illuminate\Database\Eloquent\Model;class FooBase extends Model {     protected $table = 'foo_bar';}FooExtends.phpnamespace App\Models;class FooExtends extends FooBase {     public function method() {           return FooBase::first(); // or even parent::first()     }}调用(new FooExtends())->method()返回一个FooExtends而不是的实例FooBase。(只是静态方法受到影响,这可能会回答我自己的问题,但有人会认为 Laravel 会处理这个问题。(new FooBase())->first()从子类内部调用是有效的。)这里发生了什么?PHP 7.3,Laravel 5.7
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

基本上,对“静态”调用的FooBase::first()解释与 相同parent::first(),因为 PHP 知道这FooBase是当前类上下文的父级FooExtends。并且由于调用parent保持在当前对象的上下文中,因此first()调用最终会被路由到__call()而不被路由__callStatic()(这将使用FooBase该类创建一个新的上下文)。

学习 PHP 内部和类上下文真的很有趣。谢谢你给我一个四处闲逛的理由。:)


查看完整回答
反对 回复 2021-10-22
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信