Start · Sprachen · PHP · Referenz · com_print_typeinfo

com_print_typeinfo

Funktion

Gibt eine PHP-Klassendefinition für ein COM-Dispatch-Interface aus, die als Grundlage für eigene COM-Wrapper-Klassen verwendet werden kann.

seit PHP 4.1.0 Kategorie: misc

Signatur

com_print_typeinfo(variant|COMObject $obj_or_typelibname, int $dispinterface = -1, bool $wantsink = false): bool

Beschreibung

com_print_typeinfo() analysiert die Typbibliothek eines COM-Objekts oder einer angegebenen Typbibliothek und gibt eine PHP-Klassendefinition aus, die das zugehörige Dispatch-Interface beschreibt. Die ausgegebene Klasse enthält Methoden- und Eigenschafts-Stubs, die das Interface widerspiegeln.

Die Funktion ist primär ein Entwicklungswerkzeug: Entwickler können damit schnell eine Vorlage für eigene PHP-Wrapper-Klassen rund um ein COM-Objekt generieren, ohne die Typbibliothek manuell zu inspizieren. Die Ausgabe erfolgt direkt in den Output-Buffer (z. B. den Browser oder die Kommandozeile).

Mit dem Parameter $wantsink kann gesteuert werden, ob anstelle der normalen Interface-Definition eine sogenannte Sink-Klasse ausgegeben werden soll, die für das Empfangen von COM-Ereignissen (Event-Callbacks) genutzt werden kann. In Verbindung mit com_event_sink() lassen sich so COM-Ereignisse in PHP verarbeiten.

Die Funktion steht nur auf Windows-Plattformen zur Verfügung und setzt die PHP-COM-Erweiterung voraus. Sie ist ausschließlich für Entwicklungszwecke gedacht und sollte nicht in produktivem Code eingesetzt werden.

Parameter

Name Typ Default Beschreibung
$obj_or_typelibname Pflicht variant|COMObject Ein instanziiertes COM-Objekt oder ein String, der den Namen oder Pfad einer Typbibliothek identifiziert, aus der die Klassendefinition generiert werden soll.
$dispinterface int -1 Der Index des Dispatch-Interfaces innerhalb der Typbibliothek, das ausgegeben werden soll. Standardmäßig (-1) wird das erste (oder einzige) gefundene Interface verwendet.
$wantsink bool false Wenn true, wird eine Sink-Klasse für das Empfangen von COM-Ereignissen ausgegeben, anstelle der normalen Interface-Klassendefinition. Diese Sink-Klasse kann zusammen mit com_event_sink() verwendet werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Typinformation erfolgreich gefunden und ausgegeben wurde, andernfalls false.

Beispiele

Klassendefinition eines COM-Objekts ausgeben

<?php
// Voraussetzung: Windows mit COM-Erweiterung
// Erstelle eine COM-Instanz (hier: Microsoft Word)
$word = new COM('Word.Application');

// Gibt eine PHP-Klassendefinition für das Word-Application-Interface aus
echo '<pre>';
com_print_typeinfo($word);
echo '</pre>';

// Das COM-Objekt wieder freigeben
unset($word);
// (Beispielhafte Ausgabe, die tatsächliche Ausgabe hängt vom COM-Objekt ab) class IWordApplication { function Activate() {} function Quit($SaveChanges, $OriginalFormat, $RouteDocument) {} // ... weitere Methoden }

Sink-Klasse für COM-Ereignisse generieren

<?php
// Erstelle eine COM-Instanz
$excel = new COM('Excel.Application');

// Gibt die Sink-Klassendefinition aus, die für Ereignis-Callbacks verwendet werden kann
echo '<pre>';
com_print_typeinfo($excel, -1, true);
echo '</pre>';

// Die generierte Klasse kann dann als Basis für eine eigene Implementierung dienen:
// class MeinExcelSink extends GenerierteKlasse {
//     function WorkbookOpen($Wb) {
//         echo "Arbeitsmappe geöffnet!\n";
//     }
// }
//
// com_event_sink($excel, new MeinExcelSink(), 'AppEvents');

unset($excel);

// Wichtig · Fallstricke

Nur unter Windows verfügbar: com_print_typeinfo() ist ausschließlich auf Windows-Systemen mit aktivierter PHP-COM-Erweiterung nutzbar. Auf anderen Plattformen steht die Funktion nicht zur Verfügung.

Nur für Entwicklungszwecke: Die Funktion schreibt direkt in die Ausgabe und ist nicht für den Einsatz in produktivem Code geeignet. Sie sollte ausschließlich während der Entwicklung genutzt werden, um Wrapper-Klassen zu erstellen oder die Struktur eines COM-Interfaces zu erkunden.

Die Ausgabe der Funktion ist eine Orientierungshilfe und muss in der Regel manuell angepasst werden, bevor sie als funktionsfähige Klasse eingesetzt werden kann.