Start · Sprachen · PHP · Referenz · variant_mul

variant_mul

Funktion

Multipliziert die Werte zweier Variant-Werte miteinander und gibt das Ergebnis als neuen Variant zurück.

seit PHP 5.0.0 Kategorie: misc

Signatur

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

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

Typ
mixed
Beschreibung
Gibt das Ergebnis der Multiplikation als 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
Ergebnis: 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";
Gesamtpreis: 59,97 EUR

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