WSDL から PHP に生成されたクラス コードを使用しています。私を悩ませているのは、単純な配列が存在しないクラスのオブジェクトである必要があるように見えるようにクラスメソッドが書かれた方法です。
特に、この TFolderArray は、ドキュメントによって TFolder オブジェクトの単純な配列である必要があります。
<xsd:complexType name="TFolderArray">
<xsd:complexContent>
<xsd:restriction base="SOAP-ENC:Array">
<xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="tns:TFolder[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
TFolderArray のドキュメントでは、これを TFolder 構造体の配列として定義しています。ただし、そのような配列が GetOpportunityList() (以下を参照) に渡されると、スローされます。
Exchange::GetOpportunityList() に渡される引数 3 は、TFolderArray のインスタンスでなければなりません。
そのクラスのオブジェクトをインスタンス化しようとすると、当然Class 'TFolderArray' not found
.
$FolderArray が TFolderArray のインスタンスであるという制限を取り除き、単に TFolder オブジェクトの配列を渡すと、機能は期待どおりになります。
では、クラス レンダリング ソフトウェアは WSDL を誤って解釈したのでしょうか? $FolderArray の型ヒントは単に「配列」であるべきですか? または、クラスが存在しないにもかかわらず、配列を「入力」できる方法はありますか? メソッドは次のとおりです。
public function GetOpportunityList(TLoginInfo $LoginInfo, $AllRecords, TFolderArray $FolderArray) {
return $this->__soapCall('GetOpportunityList', array($LoginInfo, $AllRecords, $FolderArray), array(
'uri' => 'urn:ExchangeService:Exchange33',
'soapaction' => ''
)
);
}