Signatur
Beschreibung
Die Klasse dotnet ist eine spezielle PHP-Klasse, die ausschließlich unter Windows verfügbar ist und die COM-Interop-Schicht nutzt, um .NET-Assemblies einzubinden. Damit können Entwickler .NET-Klassen instanziieren, deren Methoden aufrufen und auf deren Eigenschaften zugreifen, als wären es native PHP-Objekte.
Die Klasse dotnet ist eng verwandt mit der COM-Klasse und erbt deren Grundmechanismus. Im Hintergrund wird die .NET-Assembly über den COM Callable Wrapper (CCW) angesprochen. Dies bedeutet, dass die Ziel-Assembly entweder im Global Assembly Cache (GAC) registriert sein muss oder ihr vollständiger Pfad angegeben werden muss.
Typische Einsatzszenarien sind Windows-spezifische Integrationen, bei denen vorhandene .NET-Bibliotheken (z. B. für Dokumentenverarbeitung, Kryptographie oder Unternehmenssoftware) direkt aus PHP heraus genutzt werden sollen, ohne diese Logik neu implementieren zu müssen.
Hinweis: Diese Klasse ist nur unter Windows verfügbar und erfordert die PHP-Erweiterung com_dotnet (aktiviert via extension=com_dotnet in der php.ini). Sie ist für plattformübergreifende Projekte ungeeignet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $assembly_name Pflicht | string | Der vollqualifizierte Name der .NET-Assembly, z. B. 'mscorlib', oder ein absoluter Dateipfad zur .dll-Datei. |
|
| $datatype_name Pflicht | string | Der vollqualifizierte .NET-Klassenname innerhalb der Assembly, der instanziiert werden soll, z. B. 'System.Collections.ArrayList'. |
|
| $codepage | int | CP_ACP | Optionale Codepage für die String-Konvertierung zwischen PHP und .NET. Typische Werte sind CP_ACP (0), CP_UTF8 (65001). Entspricht dem codepage-Parameter der COM-Klasse. |
Rückgabewert
Beispiele
Verwendung von System.Collections.ArrayList aus mscorlib
<?php
// Erfordert Windows + PHP-Erweiterung com_dotnet
$list = new dotnet('mscorlib', 'System.Collections.ArrayList');
$list->Add('Eintrag 1');
$list->Add('Eintrag 2');
$list->Add('Eintrag 3');
echo 'Anzahl Einträge: ' . $list->Count . PHP_EOL;
for ($i = 0; $i < $list->Count; $i++) {
echo $list->Item($i) . PHP_EOL;
}
?>
Zugriff auf eine benutzerdefinierte .NET-Assembly per Dateipfad
<?php
// Pfad zur eigenen .NET-DLL (muss COM-sichtbar / COM-registriert sein)
try {
$obj = new dotnet(
'C:\\MeineApp\\MeineBibliothek.dll',
'MeineApp.Namespace.MeineKlasse',
65001 // UTF-8
);
$ergebnis = $obj->BerechneErgebnis(42);
echo 'Ergebnis: ' . $ergebnis . PHP_EOL;
} catch (Exception $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
?>
// Wichtig · Fallstricke
Plattformeinschränkung: Die Klasse dotnet ist ausschließlich unter Windows verfügbar. Auf Linux- oder macOS-Systemen führt ihr Einsatz zu einem fatalen Fehler. Plattformunabhängige Alternativen sind z. B. Micro-Services oder REST-APIs, die .NET-Logik kapseln.
Erweiterung erforderlich: Die PHP-Erweiterung com_dotnet muss in der php.ini aktiviert sein: extension=com_dotnet. Ohne diese Erweiterung ist die Klasse nicht verfügbar.
Assembly-Registrierung: Benutzerdefinierte Assemblies müssen entweder im GAC registriert oder für COM sichtbar gemacht worden sein (regasm-Tool). Andernfalls schlägt die Instanziierung fehl.
Sicherheit: Das Einbinden externer .NET-Assemblies birgt erhebliche Sicherheitsrisiken. Stellen Sie sicher, dass ausschließlich vertrauenswürdige Assemblies aus kontrollierten Quellen verwendet werden, und schränken Sie Dateisystem-Zugriffe für den PHP-Prozess entsprechend ein.
Ab PHP 8.x wird diese Klasse als legacy betrachtet. Sie funktioniert zwar noch, es empfiehlt sich jedoch, moderne Integrationsansätze zu bevorzugen.