2011-04-15 62 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) 

由于运算符优先级。