繁体   English   中英

Laravel雄辩的查询php版本问题(5.6与7.0)

[英]Laravel Eloquent Query php version issue (5.6 vs. 7.0)

我提到了一个与此主题有关的奇怪问题。我自己“解决”了该问题,但想讨论是否有人了解此问题的原因。

此查询在php 7.0上运行良好:

$image = (ProductImage::all()->where('productHistory_id', $product->history_id))->first();

并导致syntax error, unexpected '->' (T_OBJECT_OPERATOR)

此查询(不带括号)可在php 7.0 5.6下正常工作:

$image = ProductImage::all()->where('productHistory_id', $product->history_id)->first();

哇?!

亲切的问候,尼科

PHP类型检查在5.x和7.x之间进行了重大改进。

在两个版本中,表达式:

ProductImage::all()->where('productHistory_id', $product->history_id)

返回QueryBuilder的实例。

我怀疑括号的存在会导致早期版本的PHP解释器将其理解为标量值(如(1 + 1)+1),而不是对象值。

这说明了为什么您会得到意外的对象运算符,因为PHP 5.X无法正确理解(...)表达式作为对象的返回。

此错误完全是由与数组解引用有关的相同解析错误引起的。 它存在于PHP 5.4之前的版本中,是由于交互程序未将函数返回为数组而未事先使用变量来存储它而导致的。

另外,圆括号不会改变任何内容,因为对对象的操作始终在语句中从左到右执行。 我是否可以建议您避免在代码库中添加无用的噪声?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM