为什么不结束(())严​​格通知?

chx*_*chx 5 php

end(array_keys(array(0)))PHP Strict standards: Only variables should be passed by reference(http://3v4l.org/CNLVT)

end((array_keys(array(0))))另一方面,只是工作(http://3v4l.org/168fi).为什么?

VLD反编译器显示正在运行的相同操作码,唯一的区别在于ext列,但我无法找到有关这意味着什么的文档.

Mac*_*ity 2

可能发生的情况是array_keys通过引用将结果传回。因此,PHP 会向您发出警告,表明您不应该这样做。

用括号括起来实际上会更改引用并强制 PHP 首先评估其中的语句。因此,它删除了引用。其中一件奇怪的事情看起来并不重要,但实际上却有影响。

更多关于这里的奇怪之处http://phpsadness.com/sad/51

  • `array_keys` 绝对不会通过引用将结果传回,甚至错误也表明*完全相反*。这不是正确答案! (4认同)
  • @chx 实际上确实如此。“只有变量应该通过引用传递”意味着结果_是_通过引用传递 - 但(由于实现细节)不是变量。 (2认同)