Параметры сжатия SOAP возвращают ошибку

#php #soap

#php #soap

Вопрос:

Я добавляю параметр сжатия в свой SoapClient в PHP5 и получаю это сообщение.

Почему? Я видел много примеров, использующих точно такой же синтаксис.

 '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
}
  

Комментарии:

1. Не могли бы вы показать нам некоторый контекст, пожалуйста?

2. нам понадобится остальная часть массива, в котором определен compression ключ — синтаксическая ошибка может быть результатом предыдущей строки, например.

3. @Charles — Я добавил массив параметров к вопросу. Спасибо

Ответ №1:

Проблема не имеет ничего общего с SOAP. Наблюдайте ту же ошибку с этим сокращенным тестовым примером:

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

Цитирую документацию:

Значение по умолчанию должно быть постоянным выражением, а не (например) переменной, членом класса или вызовом функции.

Хотя SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5 во время «компиляции» может эффективно быть константой, PHP, по-видимому, не выполняет такого постоянного свертывания и, следовательно, блокирует непостоянное выражение.

Вы, конечно, видели такой код раньше, просто не в качестве значения по умолчанию аргумента функции. Простым способом обойти это было бы задать аргумент по умолчанию равным false или null , а затем в теле функции проверить это и присвоить желаемое значение.

Комментарии:

1.В руководстве по PHP для определения параметров сжатия SOAP это кодируется как SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP РУКОВОДСТВО по PHP SOAP

2. @claw: И там этого нет в значении по умолчанию аргумента функции.

Ответ №2:

Вам просто нужны скобки:

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

Из-за приоритета оператора.