Start · Sprachen · PHP · Referenz · variant_xor

variant_xor

Funktion

Führt eine bitweise/logische XOR-Verknüpfung zweier COM-Variant-Werte durch und gibt das Ergebnis als Variant zurück.

seit PHP 5.0.0 Kategorie: misc

Signatur

variant_xor(mixed $left, mixed $right): mixed

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

Typ
mixed
Beschreibung
Gibt das Ergebnis der XOR-Operation als 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
bool(true) bool(false)

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
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;
bool(true) 5

// 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.