2011-04-15 45 views
1

我在PHP5中向我的SOAPClient添加壓縮選項,並且收到此消息。SOAP壓縮選項返回錯誤

爲什麼?我見過很多使用完全相同語法的例子。

'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5 

回報:

Parse error: syntax error, unexpected '|', expecting ')' in /home/absolute/public_html/book/bin/class/wsdl.class.php on line 5042 

選項數組

$options = array('cache_wsdl' => 0,'trace' => 1,'encoding' => 'utf-8','soap_version' => SOAP_1_2,'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5) 


public function WEBService($wsdl = "x.x.x.x/Service.asmx?wsdl", $options = array('cache_wsdl' => 0, 
'trace' => 1, 
'encoding' =>'utf-8', 
'soap_version' => SOAP_1_2, 
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5)) 
{ 
     // some class mapping and other wonderful things going on 
} 
+0

您能告訴我們一些情況嗎? – Charles 2011-04-15 18:21:16

+0

你想看什麼? – goingsideways 2011-04-16 02:18:04

+0

我們需要定義'compression'鍵的數組的其餘部分 - 例如,語法錯誤可能是前一行的結果。 – Charles 2011-04-16 03:31:14

回答

4

問題無關與SOAP。見證了同樣的錯誤與該減小的測試用例:

function foo($x = 1 | 2) {} 

答曰the documentation

默認值必須是常量表達式,而不是(例如)一個變量,類成員,或者一個函數調用。

雖然SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5能有效地是一個常數在「編譯」時,PHP顯然不這樣做恆定塌陷,因此扼流圈上的非恆定表達。

你之前已經看到過這樣的代碼,而不是函數參數的默認值。一個簡單的方法是將參數默認爲falsenull,然後在函數測試的主體中指定所需的值。

+1

在用於定義SOAP壓縮選項的PHP手冊中,它被編碼爲'SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP' [PHP SOAP手冊](http://www.php.net/manual/en/soapclient.soapclient.php) – goingsideways 2011-04-21 03:08:54

+4

@claw:在那裏它是* not *的函數參數的默認值。 – Anomie 2011-04-21 03:29:12

0

你只需要括號:

'compression' => (SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5) 

由於運算符優先級。