Start · Sprachen · PHP · Referenz · SoapVar

SoapVar

Klasse

Kapselt einen Wert mit expliziter SOAP-Kodierungs-Typinformation für die Verwendung in SOAP-Anfragen und -Antworten.

seit PHP 5.0.1 Kategorie: http

Signatur

class SoapVar

Beschreibung

SoapVar wird verwendet, wenn ein SOAP-Client oder -Server einen Wert mit einem expliziten XML-Schematyp übermitteln soll, der nicht automatisch aus dem PHP-Typ abgeleitet werden kann. Dies ist besonders wichtig bei encoded-SOAP-Stilen sowie bei polymorphen Typen, bei denen der eigentliche XML-Typ im SOAP-Envelope explizit angegeben werden muss.

Beim Aufbau von SOAP-Nachrichten kann PHP in vielen Fällen den korrekten XML-Typ selbst bestimmen. Sobald jedoch benutzerdefinierte XML-Typen, Typen aus anderen Namespaces oder komplexe Vererbungshierarchien ins Spiel kommen, muss der Entwickler den Typ manuell über SoapVar steuern. Der Kodierungstyp wird über vordefinierte PHP-Konstanten wie XSD_STRING, XSD_INT, SOAP_ENC_OBJECT oder XSD_ANYTYPE angegeben.

Ein typischer Anwendungsfall ist das Übermitteln eines Werts mit einem nicht standardmäßigen oder namespace-qualifizierten Typ, z. B. wenn ein WSDL-Schema einen eigenen komplexen Typ definiert und dieser korrekt mit xsi:type im gesendeten XML auftauchen soll. SoapVar erlaubt außerdem die Angabe eines benutzerdefinierten Typ-Namens, Namespaces und Knotennamens für das erzeugte XML-Element.

Die Klasse besitzt keine eigenständigen öffentlichen Methoden; ihr Zweck beschränkt sich auf die Datenhaltung für die interne SOAP-Serialisierung durch die SoapClient- und SoapServer-Komponenten.

Parameter

Name Typ Default Beschreibung
$data Pflicht mixed Der eigentliche Wert, der in der SOAP-Nachricht übertragen werden soll. Kann ein skalarer Wert, ein Array oder ein Objekt sein.
$encoding Pflicht int Gibt den SOAP-Kodierungstyp als Ganzzahl-Konstante an, z. B. XSD_STRING, XSD_INT, XSD_BOOLEAN, SOAP_ENC_OBJECT, SOAP_ENC_ARRAY oder XSD_ANYTYPE.
$type_name string Optionaler Name des XML-Typs (z. B. der Name eines benutzerdefinierten komplexen Typs), der im erzeugten SOAP-XML als xsi:type-Attribut erscheint.
$type_namespace string Optionaler Namespace-URI für den unter type_name angegebenen Typ. Wird für benutzerdefinierte oder namespace-qualifizierte XML-Schematypen benötigt.
$node_name string Optionaler Name des XML-Elements (Knotenname), das im SOAP-Envelope für diesen Wert erzeugt wird.
$node_namespace string Optionaler Namespace-URI für den XML-Knoten, dessen Name über node_name angegeben wird.

Beispiele

Einfacher XSD-String-Wert mit explizitem Typ

<?php
$client = new SoapClient('http://example.com/service?wsdl');

// Wert als expliziter XSD_STRING übergeben
$param = new SoapVar('Hallo Welt', XSD_STRING);

$result = $client->greet(['message' => $param]);
var_dump($result);

Benutzerdefinierter komplexer Typ mit eigenem Namespace

<?php
// Komplexen Typ aus einem eigenen Schema als SoapVar kapseln
$address = new stdClass();
$address->street = 'Musterstraße 1';
$address->city   = 'Berlin';
$address->zip    = '10115';

$soapAddress = new SoapVar(
    $address,
    SOAP_ENC_OBJECT,
    'Address',                      // xsi:type-Name
    'http://example.com/schema',    // Typ-Namespace
    'address',                      // Knotenname im XML
    'http://example.com/schema'     // Knoten-Namespace
);

$client = new SoapClient('http://example.com/service?wsdl');
$result = $client->createOrder(['deliveryAddress' => $soapAddress]);
var_dump($result);

Numerischen Wert als XSD_INT übergeben

<?php
$client = new SoapClient(null, [
    'location' => 'http://example.com/soap',
    'uri'      => 'http://example.com/ns',
    'style'    => SOAP_RPC,
    'use'      => SOAP_ENCODED,
]);

$quantity = new SoapVar(42, XSD_INT);

$result = $client->setQuantity(new SoapParam($quantity, 'quantity'));
print_r($result);

// Wichtig · Fallstricke

Kodierungs-Konstanten: Für encoding stehen u. a. folgende Konstanten zur Verfügung: XSD_STRING, XSD_INT, XSD_FLOAT, XSD_DOUBLE, XSD_BOOLEAN, XSD_DATETIME, XSD_BASE64BINARY, XSD_ANYTYPE, SOAP_ENC_OBJECT, SOAP_ENC_ARRAY. Diese Konstanten sind im PHP-SOAP-Modul definiert und entsprechen den XML-Schema-Typen.

Nur bei aktivierter SOAP-Extension: SoapVar erfordert die PHP-SOAP-Extension (ext/soap). Ist diese nicht geladen, steht die Klasse nicht zur Verfügung.

Kein WSDL-Modus nötig: SoapVar ist sowohl im WSDL-Modus als auch im WSDL-losen Modus einsetzbar, wobei sie im WSDL-losen Modus (uri/location) besonders häufig benötigt wird, da dort keine automatische Typ-Ableitung aus der WSDL stattfindet.