Signatur
Beschreibung
variant_sub() führt eine Subtraktion zweier Variant-Werte durch, wie sie in der COM-Automatisierung (Component Object Model) unter Windows verwendet werden. Die Funktion entspricht dem Operator - im VBScript-Kontext und gibt das Ergebnis als PHP-Variant-Objekt zurück.
PHP-Skalare (Integer, Float, String etc.) werden dabei automatisch in kompatible Variant-Typen konvertiert, bevor die Operation durchgeführt wird. Das Ergebnis hat denjenigen Typ, der von COM entsprechend der Typregeln für Variant-Arithmetik bestimmt wird – zum Beispiel VT_I4 für ganzzahlige Ergebnisse oder VT_R8 für Fließkommazahlen.
Diese Funktion ist ausschließlich auf Windows-Systemen verfügbar und erfordert die PHP COM-Erweiterung (php_com_dotnet.dll). Sie ist vor allem dann nützlich, wenn man mit COM-Objekten oder Daten interagiert, die explizit Variant-Typen benötigen, und man sicherstellen möchte, dass die Arithmetik COM-konform (und nicht einfach als PHP-Typen) durchgeführt wird.
- Nützlich bei der Arbeit mit Microsoft Office-Automatisierung (z. B. Excel, Word) oder anderen COM-Servern.
- Verhält sich identisch zum VBScript-Minus-Operator hinsichtlich der Typpromotion.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $left Pflicht | mixed | Der linke Operand. Kann ein VARIANT-Objekt oder ein PHP-Skalarwert sein, der automatisch in einen Variant umgewandelt wird. |
|
| $right Pflicht | mixed | Der rechte Operand, der vom linken subtrahiert wird. Kann ein VARIANT-Objekt oder ein PHP-Skalarwert sein, der automatisch in einen Variant umgewandelt wird. |
Rückgabewert
VARIANT-Objekt zurück, das das Ergebnis der Subtraktion enthält. Der genaue Variant-Typ des Ergebnisses richtet sich nach den COM-Typregeln für die beteiligten Operanden. Im Fehlerfall (z. B. bei inkompatiblen Typen) wird eine com_exception ausgelöst.Beispiele
Einfache Subtraktion zweier Variant-Werte
<?php
// Zwei VARIANT-Objekte erstellen und subtrahieren
$a = new VARIANT(100, VT_I4);
$b = new VARIANT(35, VT_I4);
$result = variant_sub($a, $b);
echo (int) $result; // 65
Subtraktion mit PHP-Skalaren (automatische Konvertierung)
<?php
// PHP-Skalare werden automatisch in Variant umgewandelt
$variant = new VARIANT(200.50, VT_R8);
$result = variant_sub($variant, 50.25);
echo (float) $result; // 150.25
Fehlerbehandlung bei inkompatiblen Typen
<?php
try {
$a = new VARIANT('Hallo', VT_BSTR);
$b = new VARIANT(10, VT_I4);
$result = variant_sub($a, $b);
echo (string) $result;
} catch (com_exception $e) {
echo 'Fehler bei Variant-Subtraktion: ' . $e->getMessage();
}
// Wichtig · Fallstricke
Plattformabhängigkeit: variant_sub() ist ausschließlich unter Windows verfügbar und setzt die aktivierte COM-Erweiterung (extension=com_dotnet in der php.ini) voraus. Auf Linux- oder macOS-Systemen existiert diese Funktion nicht.
Typverhalten: Die Typen der Rückgabe richten sich nach den COM-Spezifikationen für Variant-Arithmetik. Eine Subtraktion zweier VT_I4-Werte ergibt wieder VT_I4; sind Fließkommazahlen beteiligt, kann das Ergebnis VT_R8 sein. Unerwartete Typkonversionen können auftreten, wenn PHP-Strings als Operanden übergeben werden, die numerisch interpretierbar sind.
Fehlerbehandlung: Bei inkompatiblen Typen oder einem COM-Fehler wird eine com_exception geworfen. Es empfiehlt sich stets, solche Aufrufe in einem try/catch-Block zu kapseln.