【问题标题】:Laravel Eloquent Query php version issue (5.6 vs. 7.0)Laravel Eloquent Query php 版本问题(5.6 vs. 7.0)
【发布时间】:2016-12-06 05:55:36
【问题描述】:

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

此查询适用于 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 laravel eloquent version


    【解决方案1】:

    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 没有检测到函数作为数组的返回而没有事先使用变量来存储它。

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

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 2023-03-30
      • 2017-12-31
      • 2017-12-04
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 2018-11-14
      • 2013-12-12
      相关资源
      最近更新 更多