2012-01-19 5 views
2

PHP SOAP実装では、アンダースコアで始まるメソッドはWDSLから呼び出すことができません。私:アンダースコアで始まるPHP SOAP操作

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

Do not NOT WORK!ただし、期待どおりに

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

WORKS、しかし、私が要求しています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 

、またはこれを一周する方法を誰もが知っているのですか?

答えて

2

PHPの機能には、の名前に-を含めることはできません。 これを使用してメソッドを呼び出す必要があります。http://www.php.net/manual/en/soapclient.soapcall.php

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

私は問題が_(undersore)ではないかなり確信しているが、-(マイナス) - あなたのラインは、このような数学的な操作として扱われます。

$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] *と表現されます。

0

問題はアンダースコアではなく、それに続くダッシュです。 PHPの命名規則により、これが有効なメソッド名になるのを防ぐことができます。これは他の多くの言語にも当てはまり、サービスの設計者はそれらを使用する際に根本的な誤りを生じました。

PHPはこれに基づいて有効な関数名を作成していて、-_に変換しているはずです。

試してみてください。

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

__getFunctions()方法呼び出すと、私は、これはPHPの関数名や逐語的にサービスによって定義されたものを返すかはわからないがは、あなたが使用する必要が望む表示されることがあります。