Start · Sprachen · PHP · Referenz · dotnet

dotnet

Klasse

Ermöglicht unter Windows die Instanziierung von Klassen aus .NET-Assemblies und den Aufruf ihrer Methoden sowie den Zugriff auf ihre Eigenschaften direkt aus PHP heraus.

seit PHP 4.0.0 Kategorie: misc

Signatur

class dotnet

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

Typ

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;
}
?>
Anzahl Einträge: 3 Eintrag 1 Eintrag 2 Eintrag 3

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.