Signatur
Beschreibung
variant_set() ist Teil der COM/VARIANT-Erweiterung von PHP (Windows) und ermöglicht es, den Wert eines bestehenden variant-Objekts direkt zu überschreiben. Im Unterschied zur Zuweisung über den Konstruktor (new variant($wert)) wird dabei kein neues Objekt erzeugt, sondern das übergebene Objekt wird in-place modifiziert.
Diese Funktion wird typischerweise benötigt, wenn ein variant-Objekt als Referenz an eine COM-Methode übergeben wurde (z. B. als Out- oder In/Out-Parameter) und sein Inhalt nachträglich im PHP-Code aktualisiert werden muss, ohne den Objektzeiger zu verlieren.
Der neue $value wird automatisch in den internen VARIANT-Typ konvertiert, der am besten zu dem übergebenen PHP-Wert passt. Falls eine explizite Typisierung benötigt wird, sollte stattdessen variant_set_type() in Kombination mit variant_set() verwendet werden.
Die Funktion steht ausschließlich auf Windows-Systemen mit der aktivierten COM-Extension zur Verfügung und ist dort relevant, wenn ActiveX- oder COM-Objekte gesteuert werden, etwa Microsoft Office-Automatisierung oder andere Windows-spezifische Schnittstellen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $variant Pflicht | variant | Das variant-Objekt, dessen Wert überschrieben werden soll. Das Objekt wird in-place verändert. |
|
| $value Pflicht | mixed | Der neue Wert, der dem Variant-Objekt zugewiesen wird. PHP konvertiert ihn automatisch in den passenden VARIANT-Typ. |
Rückgabewert
variant-Objekt wird direkt modifiziert.Beispiele
Einfache Wertzuweisung an ein vorhandenes variant-Objekt
<?php
// Nur auf Windows mit aktiver COM-Extension verfügbar
$v = new variant(42);
echo $v->value; // 42
variant_set($v, 'Neuer Wert');
echo $v->value; // Neuer Wert
?>
Verwendung mit COM-Automatisierung (z. B. Excel)
<?php
// Nur auf Windows mit aktiver COM-Extension verfügbar
$excel = new COM('Excel.Application');
$excel->Visible = true;
$workbooks = $excel->Workbooks->Add();
$sheet = $workbooks->ActiveSheet;
// Variant-Objekt für eine Zelle vorbereiten
$cellValue = new variant(0);
variant_set($cellValue, 'Hallo, Excel!');
$sheet->Cells(1, 1)->Value = $cellValue;
$excel->Quit();
$excel = null;
?>
// Wichtig · Fallstricke
Plattformabhängigkeit: variant_set() ist ausschließlich unter Windows verfügbar und erfordert die PHP-COM-Extension (ext/com_dotnet). Auf Linux- oder macOS-Systemen steht die Funktion nicht zur Verfügung.
Typkonvertierung: PHP versucht, den übergebenen PHP-Wert automatisch in einen geeigneten VARIANT-Typ umzuwandeln. Wenn eine präzise Typsteuerung benötigt wird (z. B. explizit VT_I4 oder VT_BSTR), sollte danach variant_set_type() aufgerufen werden.
In/Out-Parameter bei COM: Wenn ein variant-Objekt als Referenz-Parameter an eine COM-Methode übergeben wird, kann dessen Rückgabewert mit variant_set() überschrieben werden, ohne den Objektzeiger ungültig zu machen.