以下划线开头的PHP SOAP操作

时间:2012-01-19 14:15:44

标签: php soap identifier

使用PHPs SOAP实现,我不能从WDSL调用方法,如果它们以下划线开头。即:

$result = $server->_-testing_-getPrices(array('Receiver'=>'John'));

不工作!

然而,

$result = $server->getPrices(array('Receiver'=>'John'));
然而,

按预期工作,我请求的SOAP服务器没有此操作。 PHP使用FIRST ONE发出的错误是:

Notice: Undefined property: SoapClient::$_ in D:\SERVER\www\test123.php on line 4

Notice: Use of undefined constant testing_ - assumed 'testing_' in D:\SERVER\www\test123.php on line 4

Fatal error: Call to undefined function getPrices() in D:\SERVER\www\test123.php on line 4

这是恕我直言,或者有人知道怎么回事吗?

4 个答案:

答案 0 :(得分:2)

我很确定问题不是_(下划线)而是-(减号) - 你的线被视为数学运算:

$result = $server->_ - testing_ - getPrices(array('Receiver'=>'John'));

显然没有意义(在这里你看到为什么php试图将testing_视为未定义的常量)。只需将您的功能从_-testing_-getPrices重命名为_testing_getPrices,它就会按预期工作。

有关更多信息,请查看the documentation以获取有效的函数名称(也适用于对象的方法):

  

函数名称遵循与PHP中其他标签相同的规则。一个有效的   函数名称以字母或下划线开头,后跟任何字符   字母,数字或下划线的数量。作为正则表达式,   它将表示如下: [a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *

答案 1 :(得分:2)

PHP的函数名称中不能包含-http://www.php.net/manual/en/functions.user-defined.php。 因此,您必须使用此方法来调用您的方法:http://www.php.net/manual/en/soapclient.soapcall.php

$result = $server->__soapCall('_-testing_-getPrices',array('Receiver'=>'John'));

答案 2 :(得分:0)

你的问题不是下划线,而是跟随它的破折号。 PHP命名约定阻止它成为有效的方法名称,许多其他语言也是如此,并且该服务的设计者在使用它们时犯了一个根本错误。

PHP应该基于此创建有效的函数名称,我猜它会将-转换为_

尝试:

$result = $server->__testing__getPrices(array('Receiver'=>'John'));

调用__getFunctions()方法可能会显示您需要使用,但我不确定这是否会返回PHP函数名称或服务定义的名称。< / p>

答案 3 :(得分:0)

我知道我要迟到了,但这也可能会有所帮助和起作用

$result = $server->{'_-testing_-getPrices'}(array('Receiver'=>'John'));

// OR
$method = '_-testing_-getPrices';
$result = $server->$method(array('Receiver'=>'John'));