【问题标题】:Why doesn't end(( )) throw a strict notice? [duplicate]为什么 end(( )) 不发出严格的通知? [复制]
【发布时间】:2014-07-06 11:47:15
【问题描述】:

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 列,但我找不到关于这意味着什么的文档。

【问题讨论】:

  • 在 MySQL 中有一个类似的技巧,您不能从同一个表中更新一个表(see this answer - 答案的第二位),但它围绕评估数据的方式展开被通过。在它周围加上一组额外的括号会改变它的处理方式。这是关于直接来自函数的值而不是在括号内被视为它自己的实体的东西。
  • 嘿,@NikiC,我正要这么做 ::D

标签: php


【解决方案1】:

array_keys 可能会通过引用将结果传回。因此,PHP 会提醒您不要这样做。

用括号括起来实际上改变了引用并强制 PHP 首先评估里面的语句。因此,它删除了引用。那些看起来没有影响但实际上有影响的奇怪事情之一。

更多关于怪异的信息在这里http://phpsadness.com/sad/51

【讨论】:

  • 我所说的,但更好、更清晰、更易于理解:) +1
  • array_keys 绝对不会通过引用传回结果,甚至错误也表明完全相反。这不是正确答案!
  • @Fluffeh 不要嫉妒;P
  • @chx 实际上是这样。 “只有变量应该通过引用传递”意味着结果 is 通过引用传递 - 但(由于实现细节)不是变量。
  • 这个问题的函数参考中有一个interesting comment,实际上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 2012-11-09
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多