使用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
这是恕我直言,或者有人知道怎么回事吗?
答案 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'));