【问题标题】:PHP/SOAP Uncaught SoapFault exception: Call to undefined methodPHP/SOAP 未捕获的 SoapFault 异常:调用未定义的方法
【发布时间】:2011-03-28 15:27:59
【问题描述】:

我正在尝试使一个非常小的 SOAP 系统正常工作,但我在几天内一直在努力解决一个(小)问题,而 Google 也无法帮助我......

我想做的事情:我想对几个变量做一些事情,我在一个类中传递这些变量。 问题:我想将 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();

“功能”类具有我想通过 SOAP 导出的所有方法。我使用传输类 Lid 作为参数。我真正想做的是在传入类 $Lid 上调用方法。 当我尝试运行客户端脚本时,它返回以下错误: Uncaught SoapFault exception: [SOAP-ENV:Server] Call to undefined method stdClass::getPrice()

我理解这个问题。 PHP 认为参数 $Lid 是一个类,而不是一个对象。

所以,我的问题:

  1. 如何使 $Lid 成为一个对象?
  2. 如何访问我的私有/公共变量?我尝试通过$Lid->NumberOfYears 执行此操作,但这只是返回一个空字符串。

提前致谢

【问题讨论】:

    标签: php class object soap


    【解决方案1】:

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

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

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

    只要我想在客户端和服务器之间“共享”一个包含方法、高级属性等的完整类,就根本不可能达到我的目标(例如,无法在传输的对象上执行方法)。

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

    HTH。

    【讨论】:

      【解决方案2】:

      又等了几天等待更多回复,我就放弃了。

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

      【讨论】:

        猜你喜欢
        • 2013-10-10
        • 1970-01-01
        • 2011-10-25
        • 2018-07-07
        • 2013-09-22
        • 1970-01-01
        • 2012-09-15
        • 2011-09-16
        • 1970-01-01
        相关资源
        最近更新 更多