2013-10-04 181 views
-1

我做了一個使用SoapClient對象的類,並在構造函數中接收webservice 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服務的通用處理程序。爲了打這個電話,我使用變量$ eu指向該類,並用於匿名函數

+2

PHP自5.3以來,您可以製作並傳遞[匿名函數](http://www.php.net/manual/en/functions.anonymous。PHP),並且PHP的所有最新版本都允許您傳遞一個字符串名稱,然後您可以調用它,就好像它是一個函數的名稱一樣。 –

+0

在PHP 5.4中,您還可以[將閉包綁定到對象](http://www.php.net/manual/en/closure.bindto.php)。 –

+0

我目前的問題是在我的匿名函數的父項中調用一個函數!任何提示? – davidmr

回答

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類!

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")); 

在消費者的身邊!在web服務類

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

這!

我的下一個步驟是讓這個單身,希望能退出額外的$ obj參數

謝謝所有幫助!

+0

更正!我無法做出單身,因爲我可能需要使用多個網址的多個網絡服務!但我仍然需要擺脫額外的參數! – davidmr

+0

有沒有辦法通過被調用的匿名函數調用調用者對象? – davidmr