PHP 中的扩展语法有什么用?

What is the spread syntax good for in PHP?

我在 JavaScript 中使用扩展语法,但它们在 PHP 中有什么用?在我尝试过的所有情况下,它的行为就像一个普通的数组。它有什么我没有找到的好用处吗?

(我知道它是如何工作的,只是求一个有用的例子,它比数组更有用)

扩展运算符 (...) 将数组(或一般的 Traversable)转换为参数列表,反之亦然。如果你正在寻找比这更花哨的东西,那你就不走运了:Javascript implementation 只是更强大,因为它 将对象表达式转换为键-值对,反之亦然。

你会如何使用它?好吧,请参考定义它的 original RFC 以获取一些实际示例:

  • call_user_func_array
  • 更高效
  • 扩展可变函数:转发
  • 部分应用:多次解包

我个人使用它是因为第一点。如 RFC 中所述:

The ... argument unpacking syntax is about 3.5 to 4 times faster than call_user_func_args. This solves the performance issue. Benchmark code and results.

你可能还会问为什么 PHP没有像Javascript那样实现对象解包。 RFC 中也回答了这个问题:

In order to ensure forward-compatibility with named arguments the unpacking operator does not support string keys. If a string key is encountered during unpacking a recoverable error is thrown. If the error is ignored using a custom error handler, no further arguments will be unpacked but the call still happens.

个人 认为这是一个陷阱,这就是我放弃对该 RFC 投票的原因。