PHP 8.4.2 Released!

SoapClient::__call

(PHP 5, PHP 7, PHP 8)

SoapClient::__callВызывает SOAP-функцию (устаревший метод)

Описание

public SoapClient::__call(string $name, array $args): mixed

Вызов этого метода напрямую устарел. Обычно функции SOAP могут вызываться как методы объекта SoapClient; в ситуациях, когда это невозможно или требуются дополнительные опции, используйте метод SoapClient::__soapCall()..

Список параметров

name

Имя вызываемой функции SOAP.

args

Массив аргументов для передачи функции. Может быть упорядоченный или ассоциативный массив. Обратите внимание, что большинство серверов SOAP требуют предоставления имён параметров, в этом случае должен быть ассоциативный массив.

Возвращаемые значения

Функции SOAP могут возвращать одно или несколько значений. Если функция SOAP возвращает только одно значение, то возвращаемое значение будет скаляром. Если возвращается несколько значений, то вместо них возвращается ассоциативный массив именованных выходных параметров.

В случае возникновения ошибки, если объект SoapClient был объявлен с опцией exceptions со значением false, будет возвращён объект SoapFault.

Добавить

Примечания пользователей 2 notes

up
22
philipp dot gruber at catchoftheday dot com dot au
10 years ago
If you are using a WSDL, the library will strip out anything from your parameters that is not defined in WSDL, without giving you any notice about this.

So if your parameters are not fully matching the WSDL, it will simply send no parameters at all.
This can be a bit hard to debug if you don't have access to the target server.

__soapCall() expects parameters in an array called 'parameters' as opposed to calling the function via it's WSDL name, where it accepts the parameters as a plain array.

I.e. if a function called sendOrder expects a parameter (array) called orderDetails, you can call it like this:

$orderDetails = array(/* your data */);
$soap->sendOrder(array('orderDetails' => $orderDetails));

Which is equivalent to:

$client->__soapCall('sendOrder', array('parameters' => array('orderDetails' => $orderDetails)));

Note the additional 'parameters' key used in __soapCall().
up
7
KRavEN
15 years ago
extend of __call thats adds a retry to handle the occasional 'Could not connect to host' exceptions

<?php
class LocalSoapClient extends SoapClient
{

public function
__call($function_name, $arguments)
{
$result = false;
$max_retries = 5;
$retry_count = 0;

while(!
$result && $retry_count < $max_retries)
{
try
{
$result = parent::__call($function_name, $arguments);
}
catch(
SoapFault $fault)
{
if(
$fault->faultstring != 'Could not connect to host')
{
throw
$fault;
}
}
sleep(1);
$retry_count ++;
}
if(
$retry_count == $max_retries)
{
throw new
SoapFault('Could not connect to host after 5 attempts');
}
return
$result;
}
}
?>
To Top