Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP$client->__soapCall(';方法';,$params);与$client相比->;方法($params);_Php_Soap - Fatal编程技术网

PHP$client->__soapCall(';方法';,$params);与$client相比->;方法($params);

PHP$client->__soapCall(';方法';,$params);与$client相比->;方法($params);,php,soap,Php,Soap,我正在用PHP创建一个SOAP客户端。我大部分的电话都是这样的 $client->__soapCall('method', $params) 据我所知,这是在WSDL中调用方法的两种方法之一,另一种是: $client->method($params); 我只能在调用只需要字符串的方法时使用第二种方法。使用需要整数的方法会导致以下错误: The value '' cannot be parsed as the type 'Int32'.' 这两个请求的工作方式有何不同?直接调用

我正在用PHP创建一个SOAP客户端。我大部分的电话都是这样的

$client->__soapCall('method', $params)
据我所知,这是在WSDL中调用方法的两种方法之一,另一种是:

$client->method($params);
我只能在调用只需要字符串的方法时使用第二种方法。使用需要整数的方法会导致以下错误:

The value '' cannot be parsed as the type 'Int32'.'
这两个请求的工作方式有何不同?

直接调用($client->method())使用了不推荐的魔法类方法\uu call()。如果您是通过扩展客户机类来实现SoapClient(请参见下面的示例),那么可以将_call()实现为“callthru”实现为_soapCall()


如果您不是通过扩展来实现您的客户机,那么使用直接调用($client->method())是一个坏主意,因为它最终将从PHP中退出。

您是否有不推荐使用此方法的参考资料?此页面暗示虚拟方法方法仍然被视为默认方法:是的,SoapClient::\uu soapCall()将在将来工作。使用“直接调用”($client->method())正在通过神奇的SoapClient::\uu call(),我怀疑这是一个措词不当的通知,这意味着显式调用
\uu call
是不可取的。说“通常,在WSDL模式下,SOAP函数可以作为SoapClient对象的方法来调用。”由于它是一个二进制扩展,这些调用实际上可能不会使用
\u调用
定义,而是使用一些内部PHP机制。这也是很有可能的。但最好谨慎行事。调用不存在的方法时,至少会发现如下异常:#0/var/www/html/../Client.php(71):SoapClient->u调用('fooTest',Array),这就是我一直避免直接调用的原因。我提出了一个错误,建议在手册中澄清此问题的措辞:因为“神奇方法”该方法设计用于WSDL定义,它可能执行更严格的类型检查,其中uu soapCall方法采用了一种实用的PHP风格的方法,尽最大努力“处理”类型。另一种可能是
->method(…)
的参数和
\uu soapCall('method',…)的参数
需要有所不同。请记住,您可以将多个单独的参数传递给“virtual”方法,例如
$client->method($a,$b,$c)
;对于
\uuuSOAPCALL
,这些必须包装在一个数组中,因为它需要固定数量的参数(请参见上的示例)。如果没有您正在加载的WSDL和
$params
内容的更多详细信息,就不可能准确说出导致错误的原因。
class mySoapClient extends SoapClient {
    public function __call($method, $parameters) {
        return $this->__soapCall($method, $parameters);
    }
}