PHP - Laravel Collection或Array的类型提示

B.A*_*A.B 4 php type-hinting laravel

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

我希望单个定义中以下两者的效果:

function test(array $traversable)
{
    print_r($traversable);
}
Run Code Online (Sandbox Code Playgroud)

function test(Illuminate\Support\Collection $traversable)
{
    print_r($traversable);
}
Run Code Online (Sandbox Code Playgroud)

和DocBlock应该是

/**
 * Function to do something
 * 
 * @param Collection|Array $traversable Traversable parameter
 * @return null Absolutely nothing
 */
Run Code Online (Sandbox Code Playgroud)

Shi*_*ai7 8

PHP 7.1将引入类型iterable提示,它将完全执行以下操作:

function test(iterable $items) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

请参阅PHP - rfc:iterable.

在此之前,如果您想同时接受Traversable和,则不能使用任何类型提示array.您唯一能做的就是使用适当的@param注释来记录它:

/**
 * @param \Traversable|array $items
 */
function test($items) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

  • `iterable` 不是一个类,所以它不能与 `instanceof` 一起使用。使用 is_iterable() 代替。 (2认同)