2016-08-01 3 views
0

나는이 주제와 관련하여 이상한 문제를 언급했다. 나는 그것을 "스스로"풀었지만 누구도이 문제를 이해한다면 논의하고 싶었다.Laravel Eloquent PHP 버전 문제 (5.6 vs 7.0)

$image = (ProductImage::all()->where('productHistory_id', $product->history_id))->first(); 

을 그리고 syntax error, unexpected '->' (T_OBJECT_OPERATOR)가 발생합니다

이 쿼리는 PHP 7.0과 함께 잘 작동합니다.

(괄호 제외)이 쿼리는 PHP 7.0 5.6와 잘 작동 :

$image = ProductImage::all()->where('productHistory_id', $product->history_id)->first(); 

whaaaat!

안부, 니코

답변

0

PHP 타입 체크가 eavily 두 버전 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가 변수를 미리 저장하지 않고 배열로 반환하는 기능을 감지하지 못하기 때문에 발생합니다.

또한 쪽지에서 개체의 작업이 항상 문에서 왼쪽에서 오른쪽으로 실행되므로 괄호는 아무 것도 변경하지 않습니다. 코드베이스에 불필요한 노이즈를 추가하지 않는 것이 좋습니다.