代码之家  ›  专栏  ›  技术社区  ›  nickf

PHP中的SOAP服务器错误-从类添加函数

  •  1
  • nickf  · 技术社区  · 15 年前

    下面是server.php中的相关行

    class MyHandler {
        public function __construct() { ... }
        public function __wakeup() { ... }
    
        public function getPrice() { ... }
    }
    
    $server = new SoapServer("my.wsdl", array("soap_version" => SOAP_1_2));
    
    $server->setClass('MyHandler');
    $server->addFunction("getPrice");
    $server->handle();
    

    本地测试(在PHP5.3上)效果很好,我能够发送请求和接收响应。

    当我把它放到我的开发服务器(PHP5.2.9)上时,我收到以下错误消息:

    SoapServer::addFunction(): Tried to add a non existant function 'getPrice'

    除了他们不会拼写之外,这是非常令人困惑的。

    addFunction() 这一行:

    $server->addFunction(SOAP_FUNCTIONS_ALL);
    

    ... 而且效果很好!当然,检查 $server->getFunctions() 表明这增加了 __construct() __wakeup()

    我做错了什么?地毯炸弹“添加所有功能”方法是唯一的方法吗?

    4 回复  |  直到 12 年前
        1
  •  5
  •   Dave Challis    15 年前

    addFunction() 告诉它查找名为 getPrice() 就其本身而言,在类之外。这不存在,因此导致错误。

    使用 addClass() 将自动添加来自的所有函数 MyHandler addFunction() getPrice() 应该已经添加了。

    此外,bugs.PHP.net上还有一个开放的标签(适用于PHP5.2.9),它似乎表明无法使用 : http://bugs.php.net/bug.php?id=47919

    虽然我没有PHP5.3的访问权限,但我不确定事情会发生什么变化,我担心。。。

        2
  •  2
  •   Hong Ooi    11 年前

    $server->addFunction(array("SOAPMethods", "getPrice"));

        3
  •  0
  •   Owen Ryan Doherty    15 年前

    嗯,不知道为什么它在PHP5.3上工作,但据我所知, SoapServer::setClass() 导出给定类中的所有方法(即 getPrice()

    SoapServer::addFunction() 特别适用于,以及功能。你有没有可能迷路了 在您当地的环境中有什么功能?

    addFunction() 调用,该调用仍应显示从“MyHandler”导出的方法。

    使用 这可能是个坏主意,好像你把 setClass() 调用它实际上会出于某种原因导出所有PHP函数。。。

        4
  •  0
  •   zakiakhmad    8 年前

    array 关键词。

    之前:

     $server->addFunction("functionName");
    

     $server->addFunction(array("functionName"));
    

    参考:PHP SoapServer::addFunction documentation .