Signatur
Beschreibung
variant_div() führt eine Division zweier Variant-Werte durch und gibt das Ergebnis ebenfalls als Variant zurück. Diese Funktion ist Teil der COM/Variant-Erweiterung von PHP, die speziell für die Arbeit mit dem Windows Component Object Model (COM) vorgesehen ist.
Im Gegensatz zum einfachen PHP-Divisionsoperator / berücksichtigt variant_div() die internen Typregeln von COM-Variants, wie sie in der Microsoft OLE-Automatisierung definiert sind. Die Ergebnistypen richten sich dabei nach den Eingabetypen: So liefert beispielsweise die Division zweier Integer-Variants ein Variant vom Typ VT_R8 (Double), sofern kein genaues Integer-Ergebnis entstehen würde.
Die Funktion ist nützlich, wenn PHP-Skripte über COM mit Windows-Anwendungen wie Microsoft Excel, Word oder anderen COM-fähigen Programmen kommunizieren und dabei exakte Variant-Typkompatibilität gewahrt werden muss. Für reguläre PHP-Berechnungen ohne COM-Kontext ist der native /-Operator vorzuziehen.
Wenn $right den Wert null oder 0 hat, wird eine com_exception ausgelöst, da eine Division durch null nicht erlaubt ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $left Pflicht | mixed | Der Dividend – ein Variant-Objekt oder ein Wert, der in ein Variant umgewandelt werden kann (z. B. int, float, string). |
|
| $right Pflicht | mixed | Der Divisor – ein Variant-Objekt oder ein Wert, der in ein Variant umgewandelt werden kann. Darf nicht null oder 0 sein, da sonst eine com_exception ausgelöst wird. |
Rückgabewert
com_exception ausgelöst.Beispiele
Einfache Division zweier Variant-Werte
<?php
// Nur auf Windows-Systemen mit aktivierter COM-Erweiterung verfügbar
$a = new VARIANT(10, VT_I4);
$b = new VARIANT(4, VT_I4);
$result = variant_div($a, $b);
echo variant_get_type($result) . "\n"; // Gibt den Typ aus (z. B. 5 = VT_R8)
echo (float) $result . "\n"; // Gibt 2.5 aus
Division mit skalaren Werten (automatische Konvertierung)
<?php
// PHP konvertiert skalare Werte automatisch in Variants
$result = variant_div(100, 8);
echo (float) $result . "\n"; // Gibt 12.5 aus
// Division durch null löst eine Ausnahme aus
try {
$r = variant_div(10, 0);
} catch (com_exception $e) {
echo 'Fehler: ' . $e->getMessage() . "\n";
}
// Wichtig · Fallstricke
Plattformabhängigkeit: variant_div() ist ausschließlich auf Windows-Systemen mit aktivierter PHP-COM-Erweiterung (php_com_dotnet.dll) verfügbar. Auf Linux- oder macOS-Systemen steht die Funktion nicht zur Verfügung.
Typregeln: Die Typkonvertierungsregeln folgen der Microsoft OLE-Automatisierungsspezifikation und können sich von den normalen PHP-Typregeln unterscheiden. Insbesondere werden Integer-Divisionen, die kein ganzzahliges Ergebnis liefern, zu VT_R8 (Double) hochgestuft.
Division durch null: Eine Division durch null oder durch ein Variant mit dem Wert 0 führt zu einer com_exception. Diese sollte mit einem try/catch-Block abgefangen werden.