簡體   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