Laravel Eloquent查询php版本问题(5.6对7.0)

时间:2016-08-01 08:17:43

标签: php laravel eloquent version

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

此查询适用于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();

whaaaat?!

亲切的问候, 尼科

1 个答案:

答案 0 :(得分:0)

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

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

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

返回QueryBuilder的一个实例。

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

这解释了为什么你得到一个意想不到的对象操作符,因为PHP 5.X并不能理解(...)表达式作为对象的正确返回。

此错误完全是由与此array dereferencing相同的解析错误引起的。它出现在PHP 5.4之前,是由于intereter没有检测到函数作为数组返回而没有使用变量来预先存储它。

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