Signatur
Beschreibung
SoapParam ist eine Hilfsklasse der SOAP-Erweiterung, die es ermöglicht, Parameter für SOAP-Aufrufe mit einem expliziten Namen zu versehen. Dies ist besonders dann notwendig, wenn der WSDL-Dienst oder der entfernte Server erwartet, dass Parameter unter einem bestimmten Namen übergeben werden, der nicht automatisch aus dem PHP-Aufruf abgeleitet werden kann.
Ohne SoapParam müssen Parameter entweder als assoziatives Array oder als positionale Argumente übergeben werden. Mit SoapParam kann jeder Parameter einzeln benannt und typisiert übergeben werden, was bei komplexen Diensten oder bei der Arbeit im Non-WSDL-Modus besonders wichtig ist.
Ein SoapParam-Objekt wird in der Regel als Argument an SoapClient::__soapCall() übergeben. Der Konstruktor akzeptiert den Wert des Parameters sowie dessen Namen als Zeichenkette. Diese Klasse ist eng mit SoapVar verwandt, die zusätzlich eine Typangabe ermöglicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | mixed | Der Wert des Parameters, der an die SOAP-Methode übergeben werden soll. Kann ein einfacher Skalarwert oder ein komplexes Objekt/Array sein. | |
| $name Pflicht | string | Der Name des Parameters, wie er vom SOAP-Dienst erwartet wird. Dieser Name wird im SOAP-Request-Envelope als Elementname verwendet. |
Beispiele
Einfacher SOAP-Aufruf mit SoapParam
<?php
// SOAP-Client im Non-WSDL-Modus erstellen
$client = new SoapClient(null, [
'location' => 'http://example.com/soap/server',
'uri' => 'http://example.com/soap',
'trace' => true,
]);
// Parameter explizit benennen
$param1 = new SoapParam('Max Mustermann', 'customerName');
$param2 = new SoapParam(12345, 'customerId');
try {
$result = $client->__soapCall('getCustomerInfo', [$param1, $param2]);
var_dump($result);
} catch (SoapFault $e) {
echo 'SOAP-Fehler: ' . $e->getMessage();
}
?>
SoapParam zusammen mit SoapVar für typisierte Parameter
<?php
$client = new SoapClient(null, [
'location' => 'http://example.com/soap/server',
'uri' => 'http://example.com/soap',
]);
// Typisierter Wert mit SoapVar
$typedValue = new SoapVar(42.5, XSD_FLOAT);
// Als benannten Parameter einwickeln
$param = new SoapParam($typedValue, 'price');
try {
$result = $client->__soapCall('calculateDiscount', [$param]);
echo 'Ergebnis: ' . $result;
} catch (SoapFault $e) {
echo 'Fehler: ' . $e->getMessage();
}
?>
// Wichtig · Fallstricke
Non-WSDL-Modus: SoapParam ist vor allem im Non-WSDL-Modus relevant, da im WSDL-Modus die Parameternamen bereits aus der WSDL-Beschreibung bekannt sind und PHP diese automatisch zuordnet.
Kompatibilität: Manche SOAP-Server verarbeiten Parameter ausschließlich positionsbasiert und ignorieren die Namen vollständig. In solchen Fällen bringt SoapParam keinen Vorteil gegenüber einfachen Arraywerten.
Encoding: Für eine präzise Typsteuerung sollte SoapParam mit SoapVar kombiniert werden, das die Angabe des XSD-Datentyps erlaubt.