PHPのSoapClientクラスによって型変換が行われ、空の配列が結合法か数値かを判断できないため、デフォルトで数値になるクライアントサーバーシナリオがあります。
公開されているすべての関数は、クラスではなく基本型を使用します。
などの連想配列array("something"=>123)
は、マップデータ型に変換されます。ただし、のように同じ配列が空の場合array()
、Ruby側で配列に変換されます。オブジェクトに型キャストする(object)array()
と、Ruby側で構造体データ型になります。
議論はもう少し複雑で、上記のように単純ではありません。
array(
"options"=>array(
"plans"=>array(
0=>array(
"name"=>"abc",
"product_options"=>array(
"optional_key_determines_associative_array_data_type"=>0,
),
),
),
),
);
下の配列"product_options"
が空の場合、マップではなく、Rubyの配列に変換されます。繰り返しになりますが、PHPでオブジェクトに型キャストすると、Rubyで構造体になります。
空の「連想」配列をRuby側のマップとして作成するには、PHP側で何ができますか?
PHP 5.3.3、SoapClientを使用。アクションWebサービスを使用するRuby1.8.7、Rails2.3.2。