我很高興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中是不可能的,但是我發現考慮到限制(不定義函數和使用條件)是最接近的, –