Signatur
Beschreibung
variant_mul() führt eine Multiplikation zweier Variant-Werte durch, wie sie im COM-Typsystem (Component Object Model) von Windows verwendet werden. Die Funktion ist Teil der PHP COM-Erweiterung und dient der Interaktion mit Windows-COM-Objekten und deren Datentypen.
Im Gegensatz zu einfachen PHP-Rechenoperatoren berücksichtigt variant_mul() die internen COM-Variant-Typen (z. B. VT_I4, VT_R8, VT_DECIMAL) und führt die Typpromotion gemäß den OLE-Automatisierungsregeln durch. Das bedeutet, dass bei der Multiplikation von Integer- und Float-Variants der Rückgabetyp automatisch dem größeren/genaueren Typ angepasst wird.
Die Funktion ist nur auf Windows-Systemen mit aktivierter com_dotnet-Erweiterung verfügbar. Sie wird hauptsächlich dann eingesetzt, wenn man COM-Variants explizit arithmetisch verknüpfen möchte, ohne die Typinformation zu verlieren, die bei einer einfachen PHP-Umwandlung verloren gehen könnte.
Beide Argumente können entweder VARIANT-Objekte oder skalare PHP-Werte sein, die intern in Variants umgewandelt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $left Pflicht | mixed | Der linke Operand der Multiplikation. Kann ein VARIANT-Objekt oder ein skalarer PHP-Wert (z. B. Integer, Float) sein. |
|
| $right Pflicht | mixed | Der rechte Operand der Multiplikation. Kann ein VARIANT-Objekt oder ein skalarer PHP-Wert (z. B. Integer, Float) sein. |
Rückgabewert
VARIANT-Objekt zurück. Der genaue Variant-Typ des Rückgabewerts richtet sich nach den OLE-Typpromotionsregeln der beiden Eingabe-Variants.Beispiele
Einfache Multiplikation zweier Variant-Objekte
<?php
// Zwei VARIANT-Objekte erstellen und multiplizieren
$a = new VARIANT(7, VT_I4); // Integer-Variant mit Wert 7
$b = new VARIANT(6, VT_I4); // Integer-Variant mit Wert 6
$result = variant_mul($a, $b);
echo "Ergebnis: " . (int)$result . "\n"; // Ausgabe: 42
Multiplikation eines Variants mit einem skalaren PHP-Wert
<?php
// Ein VARIANT-Objekt und ein PHP-Float multiplizieren
$preis = new VARIANT(19.99, VT_R8); // Float-Variant
$menge = 3; // PHP-Integer (wird automatisch konvertiert)
$gesamt = variant_mul($preis, $menge);
echo "Gesamtpreis: " . number_format((float)$gesamt, 2, ',', '.') . " EUR\n";
// Wichtig · Fallstricke
Plattformabhängigkeit: variant_mul() ist ausschließlich auf Windows-Systemen verfügbar und erfordert die aktivierte PHP-Erweiterung com_dotnet. Auf Linux- oder macOS-Systemen steht diese Funktion nicht zur Verfügung.
Typpromotion: Das Ergebnis folgt den OLE-Automatisierungsregeln: Wird beispielsweise ein VT_I4 (32-Bit-Integer) mit einem VT_R8 (Double) multipliziert, ist das Ergebnis vom Typ VT_R8. Bei Überlauf eines Integer-Variants wird automatisch in einen größeren Typ (z. B. VT_R8) promoviert.
Fehlerbehandlung: Wenn einer der Variant-Werte nicht für eine Multiplikation geeignet ist (z. B. eine Zeichenkette, die nicht als Zahl interpretiert werden kann), wird eine com_exception ausgelöst.