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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP / SOAP未捕获SoapFault异常:调用未定义的方法相关的知识,希望对你有一定的参考价值。

我正在尝试制作一个非常小的SOAP系统,但是我在几天内遇到了一个(小)问题而Google也无法帮助我......

我想做什么:我想在一些变量上做一些事情,我正在课堂上传递。问题:我想将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是一个类,而不是一个对象。

所以,我的问题:

  1. 如何让$ Lid成为对象?
  2. 如何访问我的私有/公共变量?我试图通过$Lid->NumberOfYears这样做,但这只是返回一个空字符串。

提前致谢

答案

大约两年前,我试图做一些非常接近你在这里尝试的事情。

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

实际上,SOAP工作得很好(我说“相当”,因为模糊,冗余和冗长的WSDL定义,以及PHP SOAP库的可怕,不清楚的错误消息),非常简单的数据结构(关联数组是“最好的“如果我记得很清楚,我已经能够毫无问题地使用了”。

一旦我想在客户端和服务器之间“共享”一个完整的类与方法,高级属性等,就根本无法实现我的目标(例如,无法在传输的对象上执行方法)。

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

HTH。

另一答案

等了几天等待更多的回复之后我才放弃了。

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

以上是关于PHP / SOAP未捕获SoapFault异常:调用未定义的方法的主要内容,如果未能解决你的问题,请参考以下文章

NODEJS / PHP WSDL SOAP:未将对象引用设置为对象的实例

SoapFault - faultcode:'SOAP-ENV:android中的异常

SoapFault:元素 http://schemas.xmlsoap.org/soap/envelope/:Body 上没有 id 属性(代码 wsse:InvalidSecurity)

不是有效的 AllXsd 值

PHP/MongoDB 错误:未捕获的异常“MongoCursorException”

PHP 致命错误:未捕获的异常“Symfony\Component\Yaml\Exception\ParseException”