Originaltext: http://www.cnblogs.com/Jaypei/archive/2009/04/09/1432521.html
Das letzte Mal habe ich nuSOAP erfolgreich zum Übertragen von Objekten verwendet, während Im eigentlichen Produktionsprozess gibt es oft eine weitere Anforderung, nämlich die Remote-Rückgabe eines Arrays von Objekten. Es hat einen Nachmittag gedauert, bis ich es endlich erfolgreich getestet habe, daher kann ich es kaum erwarten, es mit allen zu teilen:)
Vorbereitung
Zuerst eine Klasse definieren Benutzerinfo:
class UserInfo {
var $UserName ;
//... var $Sequence;
}
Dann schreiben Sie eine Remote-Methode zum Testen:
Funktion hello() {
a Das gewöhnliche nuSOAP-Programm lautet wie folgt: (Der gesamte Prozess ist eine Modifikation davon)
$soap = neu Soap_server();
Transformationsprozess Registrieren Sie zunächst einen zusammengesetzten Typ von UserInfo wie folgt: (Dies wurde bereits geschrieben)
$soap->wsdl->addComplexType(
'UserInfo',
'complexType',
'struct',
'alle',
'' ,
array(
'Benutzername '=>array('Name'=>'Benutzername', 'type'=>'xsd:string'),
'Sequenz'=> array('name'=>'Sequenz', 'Typ'= >'xsd:int')
));
这样就可以通过以下方式返回一个单一的 userInfo 对象 : (Hallo 中返回 $ a 或者返回 $ b)
$ soap- & gt; Register (' hello', array(),array('return'=>'tns:UserInfo'));
Sie können dies auch tun找到了返回string或int等基础类型的列表方法,如下:
当这个方法用到自定义复合类型上时类型处会变成:
xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="object[2 ]"
object并不是我们想要的。于是上网找相关资料发现了如下方法:
$soap->register('hello', array() , array('return'=>'tns:UserInfoArray') );
这里要自定义添加一个tns:UserInfoArray的数组类型,方法如下:
$soap->wsdl->addComplexType(
此时代码部分已完成,但是调用时nuSOAP缺报错了,是一个PHP错误:
Abfangbarer schwerwiegender Fehler: Objekt der Klasse UserInfo konnte nicht in einen String in ...nusoapnusoap.php online konvertiert werden. 600 2
于是找到nusoap.php的6002行看一下为何UserInfo向string转换:
$this->debug("serialisierendes Array-Element: $k, $v vom Typ: $typeDef [arrayType]“);继续调用,OK!通过了,一切顺利.
Das Obige stellt das von nusoap übergebene Objektarray vor, einschließlich des Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.