PHP 8.4.0 RC4 available for testing

SoapClient::__call

(PHP 5, PHP 7, PHP 8)

SoapClient::__callAppelle une fonction SOAP (obsolète)

Description

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

L'appel direct à cette méthode est obsolète. Habituellement, les fonctions SOAP peuvent être appelées comme méthodes de l'objet SoapClient ; dans les cas où ce n'est pas possible, ou bien qu'il est nécessaire de passer plus d'options, utilisez la méthode SoapClient::__soapCall().

Liste de paramètres

name

Le nom de la fonction SOAP à appeler.

args

Un tableau des arguments à passer à la fonction. Cela peut être soit un tableau ordonné, soit un tableau associatif. Notez que la plupart des serveurs SOAP exigent que les noms des paramètres soient fournis, auquel cas cela doit être un tableau associatif.

Valeurs de retour

Les fonctions SOAP peuvent renvoyer une ou plusieurs valeurs. Si seule une valeur est renvoyée par la fonction SOAP, la valeur de retour sera un scalaire. Si plusieurs valeurs sont renvoyées, un tableau associatif de paramètres de sortie nommés est renvoyé à la place.

En cas d'erreur, si l'objet SoapClient a été construit avec l'option exceptions définie sur false, un objet SoapFault sera renvoyé.

add a note

User Contributed Notes 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