2012-01-19 2 views
2

С реализацией SOAP для PHP я не могу вызывать методы из WDSL, если они начинаются с подчеркивания. I.e .:Операции PHP SOAP, начинающиеся с подчеркивания

$result = $server->_-testing_-getPrices(array('Receiver'=>'John')); 

НЕ РАБОТАЕТ!

Однако

$result = $server->getPrices(array('Receiver'=>'John')); 

работает, как ожидалось, однако, сервер SOAP я с просьбой не эту операцию. Ошибка, PHP выплевывает с Первый:

Notice: Undefined property: SoapClient::$_ in D:\SERVER\www\test123.php on line 4 

Notice: Use of undefined constant testing_ - assumed 'testing_' in D:\SERVER\www\test123.php on line 4 

Fatal error: Call to undefined function getPrices() in D:\SERVER\www\test123.php on line 4 

Это ИМХО ошибка, или кто-нибудь знает, как обойти это?

ответ

2

я уверен, что проблема не _ (undersore), но - (минус) - ваша линия рассматривается как математическая операция, как это:

$result = $server->_ - testing_ - getPrices(array('Receiver'=>'John')); 

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

для получения дополнительной информации, пожалуйста, обратите внимание на the documentation для действительных функций-имен (которым относится и к методам объектов, тоже):

Имена функций подчиняются тем же правилам, что и другие метки в PHP. Действительное имя функции начинается с буквы или подчеркивания, за которой следует номер буквы, цифры или символы подчеркивания. В качестве регулярного выражения оно было бы выражено следующим образом: [a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *.

0

Ваша проблема не является символом подчеркивания, это следует за ним. Соглашения об именах PHP не позволяют этому быть допустимым именем метода, это также относится ко многим другим языкам, и разработчик службы сделал фундаментальную ошибку при их использовании.

PHP должен был создать действительные имена функций на основе этого, и я предполагаю, что он преобразует - в _.

Try:

$result = $server->__testing__getPrices(array('Receiver'=>'John')); 

Вызов __getFunctions()метод может показать вы хотите, вы должны использовать, хотя я не уверен, если это возвращает имена функций PHP или те определенные службы дословной.

Смежные вопросы