SoapClient::__call
(PHP 5, PHP 7, PHP 8)
SoapClient::__call — SOAP 関数をコールする (非推奨)
説明
このメソッドを直接呼ぶのは推奨しません。 通常、SOAP の関数は SoapClient オブジェクトのメソッドとして呼べるようになっています。 それができない場合、あるいは追加オプションを指定する必要がある場合は、 SoapClient::__soapCall() を使いましょう。
パラメータ
name
-
コールするSOAP関数の名前。
args
-
関数に渡す引数の配列。 連想配列でも、数値添字形式の配列でも構いません。 ほとんどのSOAPサーバーに対しては、 引数の名前を指定することが必須であり、 その場合は、連想配列を指定する必要があることに注意して下さい。
戻り値
SOAP 関数は、一つまたは複数の値を返す可能性があります。 SOAP 関数から値をひとつだけ返す場合は、 返り値はスカラーになります。 複数の値を返す場合は、出力パラメータの名前がついた連想配列を返します。
エラーが発生した場合、
かつ SoapClient
の exceptions
を false
に設定した場合は、
SoapFault オブジェクトを返します。
+add a note
User Contributed Notes 2 notes
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().
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;
}
}
?>
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google