Start · Sprachen · PHP · Referenz · variant_sub

variant_sub

Funktion

Subtrahiert den Wert des rechten Variant-Operanden vom linken und gibt das Ergebnis als Variant zurück.

seit PHP 5.0.0 Kategorie: misc

Signatur

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

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

Typ
mixed
Beschreibung
Gibt ein 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
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
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();
}
Fehler bei Variant-Subtraktion: ...

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