【问题标题】:Type hinting closures for Laravel collections/modelsLaravel 集合/模型的类型提示闭包
【发布时间】:2021-06-21 02:23:24
【问题描述】:

我一直在研究提示我的 PHP 代码以符合 PSR 指导的类型,但对于将模型的实例传递给函数方面该怎么做有点困惑。请参阅下面的随机示例...

public function interactWithOrder($order, $basket)
{
    return;
}

对于上面的代码,$order 将是从模型中提取的单个订单的数据集合,而购物篮是一个数组。输入提示的正确方法是什么?我的建议如下...

public function interactWithOrder(mixed $order, array $basket)
{
    return;
}

任何帮助将不胜感激:)

【问题讨论】:

    标签: php laravel types closures type-hinting


    【解决方案1】:

    在将模型实例传递给函数方面该怎么做

    $order 将是从模型中提取的单个订单的数据集合

    这取决于它是哪一个。

    • $orderOrder 模型吗? ($order = Order::where(...)->first();)
    • CollectionOrder 模型吗? ($order = Order::where(...)->get();)

    如果$order 始终是Order 模型,则只需输入提示即可。

    public function interactWithOrder(\App\Models\Order $order, array $basket)
    

    \Illuminate\Database\Eloquent\Model $order 也应该可以工作。

    如果$order 始终是Order Collection,(即使是单个订单),那么只需输入提示即可。

    public function interactWithOrder(Collection $order, array $basket)
    

    Collection 可以是Illuminate\Database\Eloquent\Collection(特定)或Illuminate\Support\Collection(两者都可以使用,因为Eloquent\Collection 是从它扩展而来的)

    您打算如何使用该功能?

    【讨论】:

    • 这正是我需要的,谢谢!当我尝试传递 Auth::user() 的实例并在更近距离使用 (User $user) 时,它会引发错误 - 预期 \App\Models\User,得到 \Illuminate\Contracts\Auth\Authenticatable 是有一种方法可以解决这个问题,只需使用模型实例,或者最好将其保留为 ($user) TIA :)
    • 很奇怪。它适用于我。 dump(get_class(Auth::user())) 是否返回 'App\Models\User'
    • 是的,它可能只是我的 IDE 显示的视觉效果。那么probs会好起来的!感谢您的帮助
    • 也许您的 IDE 正在读取 Auth::user() 函数的返回类型,即 \Illuminate\Contracts\Auth\Authenticatable|null。应该没问题,因为Authenticatable是默认App\Models\Usermodel实现的接口。
    猜你喜欢
    • 2017-01-17
    • 2014-09-11
    • 1970-01-01
    • 2019-11-10
    • 2021-01-28
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多