2011-03-28 101 views
1

我正在嘗試使一個非常小的SOAP系統工作,但我正在努力解決(小)問題幾天,Google也無法幫助我...PHP/SOAP未捕獲的SoapFault異常:調用未定義的方法

我想做什麼:我想對一些變量做一些事情,我在一個類中傳遞。 問題:我想將我的server.php文件中的傳入類用作對象。但那不可能。

我的服務器PHP文件:

class Lid 
{ 
    public $NumberOfYears; //this one is public for example purpose only 
    private $tew; 
    private $School; 
    private $Price; 

    public function __construct($dump){ 
     $this->tew = "dump:".$dump; 
    } 

    public function getPrice(){ 
     return $this->Price; 
    } 
} 
class Functies{ 
    public function __construct(Lid $Lid){ 
      $Lid->getPrice(); //What I want to do 
     return new Lid($Lid->NumberOfYears); 
    } 
} 

$classmap = array('Lid'=>'Lid'); 
$server = new SoapServer(NULL, 
    array(
     'classmap'=>$classmap, 
      'uri' => "http://127.0.0.1/ns/soap/") 
    ); 
$server->setClass("Functies"); 
$server->handle(); 

類 「Functies」 擁有所有我想通過SOAP導出的方法。我使用交通類Lid作爲參數。我真正想要做的是在傳入的類$ Lid上調用方法。 當我嘗試運行客戶端腳本時,它返回以下錯誤: Uncaught SoapFault exception: [SOAP-ENV:Server] Call to undefined method stdClass::getPrice()

我明白這個問題。 PHP認爲參數$ Lid是一個類,而不是一個對象。

所以,我的問題:

  1. 我怎樣才能使$蓋上的對象?
  2. 如何訪問我的私有/公共變量?我試圖通過$Lid->NumberOfYears來做到這一點,但這只是返回一個空字符串。

在此先感謝

回答

0

大約兩年前,我一直試圖做的非常接近,你正試圖在這裏什麼東西。

從那時起,我儘可能少地使用SOAP。

事實上,SOAP工作得很好(我說「挺」,因爲晦澀,冗餘和詳細WSDL定義,併爲PHP SOAP庫的可怕的,不清楚的錯誤消息),爲非常簡單的數據結構 (如果我記得的話,關聯數組是我能夠毫無問題地使用的「最好」)。一旦我想要在客戶端和服務器之間「分享」一個完整的類,方法,高級屬性等,就很難達到我的目標(例如,無法對傳輸的對象執行方法)。

所以我放棄了這個想法花費過多時間和頭痛在它之前,並作出一切這是有可能通過SOAP傳輸只有結構簡單的數據...

HTH。

0

在等了幾天等待更多回復之後,我放棄了。

我的解決方案:如果PHP沒有爲我製作一個對象,我會自己做。因此,我只是用相同的方法創建了一個額外的類(functiesNew),但使用了普通變量作爲輸入(使用上述人員所說的簡單數據結構),而不是導出類「Functies」。

class functiesNew{ 
public function methodX($array){ 
    $Lid = new Lid(); 
    foreach($array as $name => $value){ 
     //fill the Lid object 
    } 

    // call the method we wanted to call from the beginning 
    new Functies($Lid); 
} 
} 
相關問題