我很高兴PHP 7.1引入了the iterable pseudo-type。PHP可迭代到数组或遍历
现在虽然这只是循环遍历这种类型的参数,但我不清楚当你需要将它传递给只接受array
或仅仅接受Traversable
的PHP函数时该怎么做。例如,如果你想要做一个array_diff,并且你的iterable
是Traversable
,你会得到一个array
。相反,如果您调用带有迭代器的函数,则如果iterable
是array
,则会发生错误。 (不是:iterator_to_array
)和iterable_to_traversable
?
我正在寻找一种解决方案,以避免我的函数中的条件只是为了照顾这种差异,并且不依赖于我定义自己的全局函数。
使用PHP 7.1
这是可行的,因为array_push需要一个可变数量的参数,并且你用...将这个iterable解包到一个参数列表中。由于需要在范围中引入额外的变量,然后对其进行变更,因此对我来说这不是一个可接受的解决方案。 –
@JeroenDeDauw我知道...展开它,但在数组()不以相同的方式工作,所以有一些奇怪的事情。我同意这不是一个可以接受的解决方案,事实上,我认为这在7.1中是不可能的,但是我发现考虑到限制(不定义函数和使用条件)是最接近的, –