-1

我创建了一个使用 SoapClient 对象的类,并在构造函数中接收 web 服务 url 以及方法和响应之间的关联。

有了它,我有一个只接收方法及其参数的调用函数!

但我想做更多的概括!

我想以一种允许我将它们注册为函数并直接调用它们的方式将方法传递给构造函数!

我已经看到用 C 完成了这个,我相信它可以用 PHP 完成!

谁能给我一个提示?

在 Waleed Khan 的帮助和更多的研究下,我想出了如何做到这一点!

在使用我的课程的文件上我使用这个

$webs=new WebserviceCLS('webserviceIP',array("GetData"=>"GetDataResult"),array("GetData"));

$webs->metodo['GetData']($webs,array ("idData" => "98745684"));

在我使用的类的构造函数中

foreach($met as $v)
{
    $eu = $this;
    $this->metodo[$v]= function($param) use($v,$eu)
    {
        $eu->call($v,$param);
    };
}

这样,构造函数获取 Web 服务的方法列表并创建一个匿名函数,该函数调用 Web 服务的通用处理程序。为了进行该调用,我使用指向类的变量 $eu 并在匿名函数中使用

4

2 回答 2

0

只需在调用中注释调用者的重复并在类中添加一条愚蠢的行!

呼叫者:

$webs->metodo['GetCliente'](array ("idCliente" => "98745684"));

班级:

foreach($met as $v)
{
    $eu = $this;
    $this->metodo[$v]= function($param) use($v,$eu)
    {
        $eu->call($v,$param);
    };
}

现在我可以调用 web 服务,就好像它只是另一个 PHP 类一样!

于 2013-10-04T04:18:05.093 回答
0

感谢 Waleed Khan 的提示,我能够继续寻找我的问题的答案,这几乎完全解决了!

我已经为匿名函数添加了一个额外的参数,并用它解决了我的问题!

我的代码现在是这样的:

$webs=new WebserviceCLS('http://94.46.227.3/alidata/service.asmx?    WSDL',array("GetCliente"=>"GetClienteResult"),array("GetCliente"));

$webs->metodo['GetCliente']($webs,array ("idCliente" => "98745684"));

在消费者方面!

和这个:

foreach($met as $v)
{
    $this->metodo[$v]= function($obj,$param) use($v);
    {
        $obj->call($v,$param);
    };
}

在网络服务课上!

我的下一步是使它成为一个单例,并希望能够退出额外的 $obj 参数

谢谢大家的帮助!

于 2013-10-04T03:16:07.113 回答