2013-10-15 95 views
2

我遇到了一個非常奇怪的問題。我有一個文件,只有在PHP5.5 +中有效的某些代碼,並且每當我運行jmstranslation包命令行來提取消息時,我都會收到錯誤消息,說明該文件(無法在該特定行上解析)。這很奇怪,因爲我確信我的機器上的php版本是5.5+(並且一切運行良好,包括phpunit測試)。JMSTranslation無法解析文件

我得到確切的錯誤是

[RuntimeException] 
    Could not parse "Processor.php": Unexpected token '=' on line 135 


    [PHPParser_Error] 
    Unexpected token '=' on line 135 

導致該錯誤代碼:

if (!empty($adjustments = $this->createAdjustments($order))) 
{ 
    // the empty check above should work in PHP 5.5+ 
    // ... 
} 

回答

0

爲什麼你在if測試變量賦值(這裏$adjustments)?在某些情況下,這很有用,但在你的情況下,它是一個錯字,而不是==運算符?

您是否嘗試在兩個步驟中執行相同的操作?

$adjustments = $this->createAdjustments($order); 

if (!empty($adjustments)) 
{ 
    // the empty check above should work in PHP 5.5+ 
    // ... 
} 
+0

不,我不認爲這是一個錯字,我想分配結果進行調整,然後檢查調整是否爲空。當然,你提出的建議可以很好地工作(而這就是它應該如何在舊的PHP版本中完成),但在PHP 5.5中它應該是可能的。根據php文檔:在PHP 5.5之前,empty()只支持變量;其他任何東西都會導致解析錯誤。換句話說,以下內容不起作用:空(trim($ name))。相反,使用trim($ name)== false。 – mr1031011

+0

好的,我在PHP文檔中看到PHP5.5可以使用'empty(trim($ name))'語法。但是我沒有在文檔頁面上看到可以在測試中進行分配的地方。無論如何,由於錯誤是由'PHPParser'觸發的,我認爲這是PHPParser的問題,而不是PHP5或Symfony2。所以,也許你應該檢查PHPParser是否與PHP5.5語法兼容,或聯繫開發人員來報告這個錯誤。 –

+0

你是對的,我的印象是這屬於PHP5,但似乎並非如此。我將檢查解析器插件作者,看看是否有任何修復。我會用我發現的任何結果更新這個問題。 – mr1031011