关于这个话题,我提到了一个奇怪的问题。我自己“解决了”问题,但想讨论一下是否有人理解这背后的问题。
这个查询在php7.0中运行得很好:
$image = (ProductImage::all()->where('productHistory_id', $product->history_id))->first();并导致syntax error, unexpected '->' (T_OBJECT_OPERATOR)。
这个查询(没有括号)在php7.0和5.6中运行得很好:
$image = ProductImage::all()->where('productHistory_id', $product->history_id)->first();华特?!
向你问好,妮可
发布于 2016-08-01 08:29:50
PHP类型检查在5.x到7.x之间被彻底修改
在这两个版本中,表达式:
ProductImage::all()->where('productHistory_id', $product->history_id)返回QueryBuilder的实例。
我怀疑括号的存在会导致早期版本的PHP解释器将其理解为标量值(如(1+1)+1),而不是对象值。
这解释了为什么您会得到一个意外的对象运算符,因为PHP5.X不理解返回(.)表达式作为对象正确。
这个错误完全是由这个关于array dereferencing的解析错误引起的。它出现在pre 5.4中,原因是没有事先使用变量来存储函数,就无法检测函数作为数组的返回。
另外,括号不会改变任何东西,因为对象上的操作总是在语句中从左到右执行。我可以建议你避免在你的代码库中添加无用的噪音吗?
https://stackoverflow.com/questions/38693986
复制相似问题