PHP/SOAP未捕获的SoapFault异常:调用未定义的方法

问题描述:

我正在尝试使一个非常小的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来做到这一点,但这只是返回一个空字符串。

在此先感谢

大约两年前,我一直试图做的非常接近,你正试图在这里什么东西。

从那时起,我尽可能少地使用SOAP。

事实上,SOAP工作得很好(我说“挺”,因为晦涩,冗余和详细WSDL定义,并为PHP SOAP库的可怕的,不清楚的错误消息),为非常简单的数据结构 (如果我记得的话,关联数组是我能够毫无问题地使用的“最好”)。一旦我想要在客户端和服务器之间“分享”一个完整的类,方法,高级属性等,就很难达到我的目标(例如,无法对传输的对象执行方法)。

所以我放弃了这个想法花费过多时间和头痛在它之前,并作出一切这是有可能通过SOAP传输只有结构简单的数据...

HTH。

在等了几天等待更多回复之后,我放弃了。

我的解决方案:如果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); 
} 
}