什么是PHP中的扩展语法?

时间:2018-04-27 17:45:51

标签: php spread-syntax

我在JavaScript中使用扩展语法,但它们在PHP中使用了什么?在我尝试过的所有情况下,它都像通常的数组一样。我找不到它有什么用处吗?

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

1 个答案:

答案 0 :(得分:4)

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

你怎么用这个?好吧,请参考original RFC定义它的一些实际例子:

  • 比[{1}}
  • 更高效
  • 扩展可变参数功能:转发
  • 部分申请:多次拆包

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

  

...参数解包语法比call_user_func_args快3.5到4倍。这解决了性能问题。基准代码和结果。

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

  

为了确保与命名参数的向前兼容性,解包操作符不支持字符串键。如果在解包期间遇到字符串键,则抛出可恢复的错误。如果使用自定义错误处理程序忽略错误,则不会解压缩其他参数,但仍会发生调用。

个人发现这是一个陷阱,这就是我对此RFC投弃权票的原因。