#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 SOAP2. @claw: И там этого нет в значении по умолчанию аргумента функции.
Ответ №2:
Вам просто нужны скобки:
'compression' => (SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5)
Из-за приоритета оператора.