首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel雄辩的查询php版本问题(5.6 vs.7.0)

Laravel雄辩的查询php版本问题(5.6 vs.7.0)
EN

Stack Overflow用户
提问于 2016-08-01 08:17:43
回答 1查看 244关注 0票数 0

关于这个话题,我提到了一个奇怪的问题。我自己“解决了”问题,但想讨论一下是否有人理解这背后的问题。

这个查询在php7.0中运行得很好:

代码语言:javascript
复制
$image = (ProductImage::all()->where('productHistory_id', $product->history_id))->first();

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

这个查询(没有括号)在php7.05.6中运行得很好:

代码语言:javascript
复制
$image = ProductImage::all()->where('productHistory_id', $product->history_id)->first();

华特?!

向你问好,妮可

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 08:29:50

PHP类型检查在5.x到7.x之间被彻底修改

在这两个版本中,表达式:

代码语言:javascript
复制
ProductImage::all()->where('productHistory_id', $product->history_id)

返回QueryBuilder的实例。

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

这解释了为什么您会得到一个意外的对象运算符,因为PHP5.X不理解返回(.)表达式作为对象正确。

这个错误完全是由这个关于array dereferencing的解析错误引起的。它出现在pre 5.4中,原因是没有事先使用变量来存储函数,就无法检测函数作为数组的返回。

另外,括号不会改变任何东西,因为对象上的操作总是在语句中从左到右执行。我可以建议你避免在你的代码库中添加无用的噪音吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38693986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档