gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:19:28 25 4
gpt4 key购买 nike

扩展 Eloquent 模型似乎是一个 thing人们这样做。我有一个有趣的问题:

FooBase.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class FooBase extends Model {
protected $table = 'foo_bar';
}

FooExtends.php

namespace 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

最佳答案

这是一个非常有趣的 PHP 怪癖 doesn't apply static context when calling an ancestor class .

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

了解 PHP 内部结构和类上下文非常有趣。谢谢你给我一个四处闲逛的理由。 :)

关于php - Laravel Eloquent - 从子模型访问父模型返回子模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57127530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com