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

nic*_*ckf 2 php soap

我正在编写一个SOAP服务器并遇到了一个奇怪的问题.

这是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();
Run Code Online (Sandbox Code Playgroud)

在本地测试(在PHP 5.3上)工作正常,我能够发送请求和接收响应.

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

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

除了他们不能拼写的事实,这是非常令人困惑的.

我已经设法通过将addFunction()行更改为此来解决此问题:

$server->addFunction(SOAP_FUNCTIONS_ALL);
Run Code Online (Sandbox Code Playgroud)

......它工作正常!当然,检查$server->getFunctions()表明这也增加了我的课程__construct()__wakeup()功能,这似乎不是一件好事.

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

Dav*_*lis 5

使用addFunction()它告诉它在类之外寻找一个getPrice()自己命名的函数.这不存在,因此导致错误.

使用addClass()将自动添加所有功能MyHandler,因此您不需要调用addFunction(),getPrice()应该已经添加.

另外,在bugs.php.net上有一个打开的票证(对于PHP 5.2.9),似乎表明没有办法使用addFunction()以下方法添加类方法:http://bugs.php.net/bug.php?id = 47919

我无法访问PHP 5.3,所以不确定事情是如何改变的我恐怕......