PHP 8.4.1 Released!

SoapClient::__call

(PHP 5, PHP 7, PHP 8)

SoapClient::__callChama uma função SOAP (descontinuada)

Descrição

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

Chamar este método diretamente foi descontinuado. Em vez disso, recomenda-se a utilização das funções SOAP como métodos do objeto SoapClient. No entanto, em alguns casos pode ser necessário utilizar opções adicionais ou chamar funções com nomes dinâmicos, e nesses casos é recomendado utilizar o método SoapClient::__soapCall(). Este último permite um controle mais detalhado sobre a chamada da função, incluindo a especificação do nome da função como uma string.

Parâmetros

name

O nome da função SOAP a ser chamada.

args

Ao chamar uma função SOAP, é necessário passar os argumentos adequados para que a operação seja executada corretamente. Esses argumentos são fornecidos como um array, que pode ser organizado de duas formas distintas: array indexado (também conhecido por "array ordenado") ou array associativo. É importante notar que muitos servidores SOAP requerem que os nomes dos parâmetros sejam fornecidos na chamada da função. Nesse caso, é necessário utilizar um array associativo para garantir que cada valor seja atribuído ao parâmetro correto.

Valor Retornado

Funções SOAP podem retornar um ou vários valores. Caso a função retorne apenas um valor, tratar-se-á um valor escalar. Se vários valores forem retornados, em vez disso, será retornado um array associativo de parâmetros de saída nomeados. Já no caso de retornar múltiplos valores, tratar-se-á de um array associativo de parâmetros de saída nomeados.

Ao ocorrer um erro durante a execução de uma operação SOAP, o objeto SoapClient poderá retornar um objeto SoapFault para indicar o problema. No entanto, vale referir que esse comportamento depende da opção exceptions, sendo que esta pode ser configurada no momento que o objecto é instanciado. Caso ocorra um erro e essa opção esteja definida como false, a biblioteca do PHP não lançará uma exceção.

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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