我正在尝试制作一个非常小的SOAP系统,但是我在几天内遇到(小)问题而谷歌也无法帮助我......
我想做什么:我想在一些变量上做一些事情,我正在课堂上传递。 问题:我想将server.php文件中的传入类用作Object。但那是不可能的。
我的服务器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是一个类,而不是一个对象。
所以,我的问题:
$Lid->NumberOfYears
执行此操作,但这只是返回一个空字符串。提前致谢
答案 0 :(得分:0)
大约两年前,我试图做一些非常接近你在这里尝试的事情。
从那时起,我尽可能少地使用SOAP。
实际上,SOAP工作得很好(我说“非常”,因为隐藏的,冗余的和冗长的WSDL定义,以及PHP SOAP库的可怕,不清楚的错误消息),对于非常简单的数据结构(如果我记得很清楚的话,关联数组是我能够毫无问题地使用的“最佳”)。
一旦我想在客户端和服务器之间“共享”一个完整的类与方法,高级属性等,就根本无法实现我的目标(例如,无法对传输的对象执行方法)。 / p>
所以我在花费太多时间和头痛之前就放弃了这个想法,并且通过SOAP传递只有简单结构的数据......
HTH。
答案 1 :(得分:0)
等了好几天等待更多回复之后我就放弃了。
我的解决方案:如果PHP没有为我制作一个对象,我会自己制作它。
因此,我没有导出类“Functies”,而是使用相同的方法创建了一个额外的类(functiesNew),但使用普通变量作为输入(使用上面提到的人所说的简单数据结构)。
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);
}
}