2016-08-01 75 views
0

我提到了一個關於這個主題的奇怪問題。我自己「解決」了它,但是想討論是否有人理解背後的問題。Laravel雄辯查詢PHP版本問題(5.6與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(); 

whaaaat?

此致 尼科

回答

0

PHP類型檢查被eavily 5和x

之間改組在這兩個版本的表達:

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

歸路的QueryBuilder的一個實例。

我懷疑在早期版本的PHP解釋器中出現括號會將其理解爲標量值(如(1 + 1)+1))而不是對象值。

這解釋了爲什麼你得到一個意外的對象操作符,因爲PHP 5.X不能正確理解(...)表達式作爲對象返回。

這個錯誤是由與這個關於array dereferencing相同的解析錯誤造成的。它出現在5.4之前的PHP中,並且是由於inteter沒有檢測到函數返回爲數組而沒有事先使用變量來存儲它。

另外,在附註中,括號不會改變任何內容,因爲對象的操作總是從一個語句的左邊到右邊執行。我可以建議你避免給你的代碼庫添加無用的噪音嗎?