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 投票的原因。
我在 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 投票的原因。