【问题标题】:PHP - Type hint for Laravel Collection or ArrayPHP - Laravel 集合或数组的类型提示
【发布时间】:2017-01-17 07:14:22
【问题描述】:

我想创建一个接受任何可遍历对象作为参数的函数,例如 Laravel 集合/数组。有没有办法在函数参数中输入提示这个条件??

我希望在单一定义中具有以下两种效果:

function test(array $traversable)
{
    print_r($traversable);
}

function test(Illuminate\Support\Collection $traversable)
{
    print_r($traversable);
}

并且 DocBlock 应该是

/**
 * Function to do something
 * 
 * @param Collection|Array $traversable Traversable parameter
 * @return null Absolutely nothing
 */

【问题讨论】:

    标签: php laravel type-hinting


    【解决方案1】:

    PHP 7.1 将引入 iterable 类型提示,它可以做到这一点:

    function test(iterable $items) { /*...*/ }
    

    PHP - rfc:iterable

    在此之前,如果您想同时接受Traversablearray,则不能使用任何类型提示。您唯一能做的就是使用正确的 @param 注释来记录它:

    /**
     * @param \Traversable|array $items
     */
    function test($items) { /*...*/ }
    

    【讨论】:

    • 使用 PHP 7.4.10 和 Laravel 7.28.3:dd(collect() instanceof iterable); // false。因此,我无法使用 iterable 来输入提示数组|Collection
    • iterable 不是一个类,所以它不适用于instanceof。请改用is_iterable()
    猜你喜欢
    • 2021-06-21
    • 2018-07-07
    • 2014-09-11
    • 2017-09-09
    • 2020-12-01
    • 2012-10-06
    • 2018-01-04
    相关资源
    最近更新 更多