我有一个 SOAP 服务器(对 WSDL 使用 Zend_Soap_AutoDiscover),其类映射作为参数传递。
当我的“ManageOrder”函数被调用时,接收到的输入具有类映射中定义的所有成员类型,除了数组中的那些(它们一直被视为“stdclass”对象,即使它们在类映射中指定)。
在 PHP 中声明的类:
class TManageOrderInput // Has been simplified for the sake of readability
{
/** @var Torder **/
public $orderHeader; // This will be detected as Torder
/** @var Torderdetailtax[] **/ // orderDetailTaxes[0] will be of type stdclass
public $orderDetailTaxes;
}
Run Code Online (Sandbox Code Playgroud)
WSDL 中的 orderdetail 和 orderdetail 数组类型:
<xsd:complexType name="ArrayOfTorderdetailtax">
<xsd:complexContent>
<xsd:restriction base="soap-enc:Array">
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:Torderdetailtax[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Torderdetailtax">
<xsd:all>
<xsd:element name="orderdetailid" type="xsd:string"/>
<xsd:element name="taxid" type="xsd:string"/>
<xsd:element name="taxamount" type="xsd:double"/>
</xsd:all>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
下面是类映射和 SOAP 服务器的创建:
$classMap = array('classmap' => array(
'TManageOrderInput' => 'TManageOrderInput',
'TManageOrderOutput' => 'TManageOrderOutput',
'Torder' => 'Torder',
'Torderdetailtax' => 'Torderdetailtax'
));
$server = new Zend_Soap_Server($wsdl, $classMap);
$server->setClass('MDGSS');
$server->handle();
Run Code Online (Sandbox Code Playgroud)
为什么数组中对象的类型仍会被检测为 stdclass?
我是否遗漏了某些东西,或者它只是 SOAP 服务器未处理的东西?