Signatur
Beschreibung
variant_xor() ist Teil der PHP-COM/Variant-Erweiterung und führt eine logische XOR-Operation (Exklusives Oder) auf zwei VARIANT-Werte durch. Die Funktion ist das PHP-Äquivalent zum VBScript-Operator Xor und verhält sich entsprechend den COM-Automatisierungsregeln für Typkonvertierungen.
XOR liefert true, wenn genau einer der beiden Operanden wahr ist, aber nicht beide gleichzeitig. Bei Integer-Varianten wird die Operation bitweise durchgeführt; bei Boolean-Varianten logisch. Sind beide Operanden NULL, ist das Ergebnis ebenfalls NULL.
Diese Funktion ist primär im Zusammenhang mit der COM-Interoperabilität unter Windows relevant, etwa wenn man mit Microsoft-Office-Anwendungen oder anderen COM-Servern kommuniziert und deren Variant-Typen direkt manipulieren möchte, ohne die automatische Typkonvertierung von PHP zu durchlaufen.
Im reinen PHP-Kontext (ohne COM-Objekte) kann man die Funktion auch mit skalaren Werten aufrufen; diese werden intern in VARIANT-Objekte gewandelt. Für normales PHP-XOR sollte jedoch der native xor-Operator verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $left Pflicht | mixed | Der linke Operand der XOR-Verknüpfung. Kann ein VARIANT-Objekt oder ein skalarer PHP-Wert (Integer, Boolean usw.) sein. |
|
| $right Pflicht | mixed | Der rechte Operand der XOR-Verknüpfung. Kann ein VARIANT-Objekt oder ein skalarer PHP-Wert (Integer, Boolean usw.) sein. |
Rückgabewert
VARIANT-Objekt zurück. Bei Boolean-Eingaben ergibt sich ein Boolean, bei Integer-Eingaben ein Integer-Ergebnis (bitweises XOR). Sind beide Operanden NULL, wird NULL zurückgegeben. Im Fehlerfall wird eine com_exception ausgelöst.Beispiele
Logisches XOR mit Boolean-Varianten
<?php
// variant_xor mit booleschen Werten
$a = new VARIANT(true, VT_BOOL);
$b = new VARIANT(false, VT_BOOL);
$result = variant_xor($a, $b);
var_dump((bool) $result); // true, da genau ein Operand true ist
$a2 = new VARIANT(true, VT_BOOL);
$b2 = new VARIANT(true, VT_BOOL);
$result2 = variant_xor($a2, $b2);
var_dump((bool) $result2); // false, da beide true sind
Bitweises XOR mit Integer-Varianten
<?php
// variant_xor mit Integer-Werten (bitweises XOR)
$a = new VARIANT(0b1100, VT_I4); // 12
$b = new VARIANT(0b1010, VT_I4); // 10
$result = variant_xor($a, $b);
// 12 XOR 10 = 0b0110 = 6
echo (int) $result; // 6
XOR mit skalaren PHP-Werten
<?php
// Auch skalare Werte sind erlaubt; PHP wandelt sie intern um
$result = variant_xor(true, false);
var_dump((bool) $result);
$result2 = variant_xor(6, 3); // 0b110 XOR 0b011 = 0b101 = 5
echo (int) $result2;
// Wichtig · Fallstricke
Windows-only: variant_xor() ist Teil der COM-Erweiterung und steht nur unter Windows zur Verfügung. Auf Linux/macOS ist die Funktion nicht vorhanden; ein Aufruf führt zu einem fatalen Fehler.
Die Funktion folgt den Typkonvertierungsregeln der COM-Automatisierung (OLE Automation). Das Verhalten bei gemischten Typen (z. B. String + Integer) kann zu unerwarteten Ergebnissen führen. Im Fehlerfall (z. B. unverträgliche Typen) wird eine com_exception geworfen, die abgefangen werden sollte.
Für reine PHP-Logik ohne COM-Interoperabilität sollten die nativen Operatoren xor (logisch) bzw. ^ (bitweise) bevorzugt werden, da diese deutlich performanter und portabler sind.