Freitag, 10. September 2010

entwickler.com Magazine Konferenzen Entwickler Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag





April 2006
aus dot.net magazin Ausgabe: 2.2002
Mündiger Verbraucher
PHP.NET - Widerspruch oder geniale Kombination?
von Jörg Krause

Schon im November 2001 wurde eine Erweiterung zur beliebten Webprogrammiersprache PHP vorgestellt, die die Nutzung des .NET Frameworks im Sinne eines Consumers erlaubt. Der Hype um .NET gründet sich wesentlich auf das Framework. Der Hype um PHP war nicht viel geringer, wurden doch damit vor allem unbedarfte Programmierer angesprochen. Kann eine solche Kombination überhaupt gelingen? Dieser Beitrag zeigt die Grundlagen. Hintergründe aus erster Hand von PHP.NET-Entwickler Daniel Beulshausen finden Sie im Interview.


PHP hat sich als Skriptsprache und Programmierumgebung für die Webserverprogrammierung einen Namen gemacht. In der Linux-Welt hat es sich neben Perl fest etabliert und auch auf Windows konnten viele Anhänger gewonnen werden. Vor allem enttäuschte ASP-Entwickler fanden den Funktionsreichtum, die Geschwindigkeit und die Einfachheit der Programmierung beeindruckend. ASP.NET ist darauf eine umfassende und ernst zu nehmende Antwort. Hinter .NET steckt aber weitaus mehr. Doch ist all das Grund genug, PHP wieder fallen zu lassen und bei der nächsten Gelegenheit auf .NET umzusteigen? Oder kann sich PHP mit seinem Bibliotheks-Konzept behaupten?

Das Imperium schlägt zurück
Über Microsoft als Unternehmen und über die Art und Weise seines Wirkens am Markt mag man streiten. Über den Erfolg mancher Produkte weniger. .NET ist ein Beispiel dafür, wie kommerzielle Softwareentwicklung aussehen kann. Die Komplexität hinter dem Framework offenbart sich erst beim zweiten und dritten Blick. Die Intelligenz des Konzepts schon beim ersten. Der Aufwand, der in der Entwicklung steckt und damit dem Programmierer erspart wird, ist enorm. Dies wird den Erfolg ausmachen. Dagegen tun sich Open Source-Projekte schwer. Die mehr oder weniger freiwillige Basis der Entwickler von freier Software ist zwar überaus aktiv und die Unterstützung ist auf breiter Basis vorhanden, das Innovationstempo ist jedoch eher bescheiden. Vor allem brauchbare Werkzeuge, die die eigene Produktivität verbessern, sind weiterhin rar. Microsoft bietet hier für gutes Geld eben nicht nur gutes Marketing, sondern auch handfeste Produkte, optimalen Service und viel Verständnis für Softwareentwickler.

Open Source auf dem Prüfstand
Am Beispiel PHP lässt sich auf der anderen Seite zeigen, wie erfolgreich Open Source sein kann. Ein cleveres Konzept zur richtigen Zeit kann relevante Marktanteile erringen. Die Entwicklung war bis zum Erscheinen von PHP 4 derart rasant, dass alle anderen Webskriptsprachen schon endgültig im Abseits gesehen wurden. Vor allem ASP (Active Server Pages) wurde totgesagt; seitdem sind scharenweise Windows-Entwickler auf PHP umstiegen. Der Zulauf erhöhte den Druck auf die PHP-Coreentwickler, den Sprachumfang an den allgemeinen Bedarf anzupassen. Seit PHP 4 wurde dabei nicht nur der Sprachkern erweitert. Hinzu kamen unzählige Bibliotheken, die insgesamt mehr als 2.000 Funktionen zur Verfügung stellen. Inzwischen dürften selbst Profis nicht mehr in der Lage sein, auf Anhieb die richtige zu finden. Und Provider, die maßgeblich die Basis für PHP bereitstellen, haben es längst aufgegeben, immer die neuesten Erweiterungen zu installieren.
Für den Entwickler ist das wenig hilfreich. Unter den selbst kompilierten Versionen herrscht wahrer Wildwuchs. Kleineren Agenturen und privaten Nutzern, die auf einen Webspace-Provider angewiesen sind, bleibt dagegen nur der Traum vom eigenen Server, wollen Sie die vielen Bibliotheken nutzen.
Es ist auch fraglich, ob sich daran etwas ändern wird. Die israelische Firma Zend hat sich zwar der Entwicklung des Sprachkerns angenommen, kontrolliert aber kaum den Wildwuchs der Erweiterungen. Letztlich wird das Profil von PHP dadurch unscharf und die Sprache ihrer Vorteile beraubt. Produkte, die alles können sollen, werden beim Kunden unglaubwürdig. Produkte die nur wenig können, das aber richtig gut, sind meist erfolgreich.

Äpfel mit Birnen vergleichen
Wenn man nun PHP mit seinen Erweiterungen und C# mit dem .NET Framework nebeneinander stellt, ist das sicher wie ein Vergleich zwischen Äpfeln und Birnen. Dem einen ist die Plattformunabhängigkeit heilig, für den anderen ist dagegen eine perfekte IDE wichtig. Microsoft hat mit dem Framework eine Sammlung von Klassen vorgestellt, die das Chaos an Erweiterungen, ActiveX-Controls und C-Bibliotheken mit einem Schlag beseitigt. Das führt zu einer gewissen Komplexität, aber diese wird durch Systematik beherrschbar. Wem das nicht reicht, der wird schnell herausfinden, dass die Erweiterung auf Basis des Frameworks leicht möglich ist. Third-Party-Hersteller werden leichtes Spiel haben, ihre Produkte anzupassen und komplexe Steuerelemente zu produzieren. Dies war mit PHP nie so leicht möglich, sind doch die sprachlichen Beschränkungen - vor allem die Unterstützung objektorientierter Programmierung - erheblich.
.NET wird mit drei richtigen Programmiersprachen, Visual C++ .NET, C# und VB.NET geliefert. Diverse Erweiterungen wie Python oder Haskell gibt es schon und weitere werden hinzukommen. Dies alles sind Sprachen, die als Producer arbeiten. Das heißt, das Framework wird zum einem verwendet, zum anderen wird aber auch kompiliert und Code in der MSIL (Microsoft Intermediate Language) erzeugt, eine Art sprachunabhängiger Bytecode. Dies funktioniert, weil sprachabhängige Dinge wie Datentypen oder Datumsfunktionen in das Framework ausgelagert wurden. Genau darin liegt die Chance für PHP.

PHP als Consumer
Das Entwicklerteam von php4win hat einen einfachen Wrapper vorgestellt, der den ersten Schritt von PHP in Richtung .NET geht. PHP arbeitet hier nur als Consumer. Das heißt, es können alle Klassen des Frameworks verwendet werden, MSIL wird dabei jedoch nicht erzeugt. Die Abarbeitung und Ausgabe des Datenstroms erfolgt in PHP. Dabei spielt es keine Rolle, ob eine so genannte Rich-Client-Applikation (also Windows-Fenster) oder ein Webserverprogramm entworfen wird. PHP könnte also von .NET erheblich profitieren, wenn sich die Entwickler nur noch mit einer Bibliothek befassen müssen. Auf der anderen Seite bedeutet dies, dass man sich bei neuen Programmen entscheiden muss, in der einen oder anderen Welt zu programmieren. Wird nun der Sprachkern vom Bibliothekballast befreit, bleibt nicht mehr allzu viel übrig. PHP ist hier eine von vielen C-ähnlichen Klammersprachen. Es ist also fraglich, ob es sich dann nicht doch lohnt, C# zu lernen und ganz zu wechseln. Insofern ist PHP.NET ein riskantes Projekt - für PHP.

So funktioniert PHP mit .NET
Die Instanziierung der .NET-Komponenten erfolgt über die Klassen DOTNET und System. WinForm und WebForm werden über die gleichnamigen Klassen angesprochen. Das bekannte Hallo Welt sieht folgendermaßen aus:

<?php
$oConsole = new DOTNET(mscorlib.dll, System.Console);
$oConsole->WriteLine(Hallo Welt);
?>

Der Weg zu .NET ist also auf den ersten Blick ziemlich direkt. Noch direkter sind die Wrapper WinForm und WebForm. Ein einfaches Fenster mit einem Button in PHP, das auch System verwendet:

<?php

function button_click($sender, $args) {
/* Aktion, wenn Button angeklickt */
}
$oApplic = new WinForm("Application");
$oWinform = new WinForm("Form");
$oFormBtn = new WinForm("Button");
$oFormBtn->Location = new System("Drawing.Point", 50, 50);
$oFormBtn->Size = new System("Drawing.Size", 80, 25);
$oFormBtn->TabIndex = 0;
$oFormBtn->Text = "Schaltfläche";
$oWinform->Text = "Fenstertitel";
$oFormBtn->click = new System("Eventhandler", "button_click")
$application->Run($winform);
?>

.NET-Experten werden den Code sicher leicht lesen können.

PHP.NET und die Zukunft
An dieser Stelle könnte eigentlich ein Blick in die Kristallkugel nicht schaden. PHP mangelt es derzeit an einer vernünftigen Unterstützung für Objekte. Mit der im Spätsommer verfügbaren ZendEngine 2 wird dieser Mangel vermutlich behoben. Dann käme PHP auch als Producer für .NET in Frage. Es wäre dann möglich, in PHP zu koden und MSIL zu erzeugen. Damit hat PHP dann den Sprung von der Skriptsprache in die Welt der Programmiersprachen vollzogen. Vermutlich wird es von da an in zwei Entwicklungssträngen weiter gehen. Kleinere und Unix-Projekte basieren nur auf PHP und nutzen die zahlreichen C-Bibliotheken. .NET-Entwicklern steht eine weitere Sprache zur Verfügung, die der eine oder andere verwendet, weil es die erste Sprache war, mit der er erfolgreich programmiert hat.
Der Erfolg hängt auch wesentlich von Faktoren ab, die die Entwickler der Schnittstelle von PHP zu .NET kaum beeinflussen können. Natürlich kann man .NET mit Notepad und dem Kommandozeilencompiler programmieren. Aber kaum jemand wird dies in der Praxis tun. Visual Studio .NET ist eine sehr leistungsfähige und hilfreiche IDE. Wer privat programmiert, wird sicher durch den Preis abgeschreckt, wer jedoch beruflich mit .NET umgeht, hat meist auch ein MSDN-Abo und da ist Visual Studio enthalten. Im Umkehrschluss beschränkt sich der Fokus von PHP.NET damit auf diejenigen, die semiprofessionell oder privat arbeiten und die seit jeher auf Open Source setzten oder setzen mussten. Ob es in diesem Kreis ausreichend Fans von .NET und anderen Microsoft-lastigen Produkten gibt, darf man zumindest kritisch betrachten. Stärkeren Einfluss könnten Projekte wie Mono haben, wo es um die Umsetzung des Frameworks auf Linux geht. Damit würden wieder Welten zusammenwachsen, die zusammengehören. Aber auch dann bleiben unzählige C-Bibliotheken, die PHP mehr oder weniger sinnvoll ergänzen und Projektleiter und Entwickler nicht immer glücklicher machen.

Interview mit PHP.NET-Entwickler Daniel Beulshausen
Jörg Krause: Seit wann programmierst du? Mit was hast du angefangen?

Daniel Beulshausen: Ich glaube, ich habe mit vierzehn Jahren richtig angefangen zu programmieren (ist also gut sieben Jahre her), damals noch in PASCAL.


Krause: php4win hat sich bei den PHP-Usern, die auf Windows entwickeln, fest etabliert. Warum eine Konkurrenz zur PHP-Binärdistribution?

Beulshausen: Eine Konkurrenz ist es eigentlich nicht, eher eine Erweiterung. php4win entstand, als die ersten PHP 4-Betaversionen im Umlauf waren. Die Liste der Funktionen war uns zu damals kurz und wir fingen an, nach und nach Funktionalität nach Windows zu portieren.
Die Hauptziele von php4win sind momentan, die inoffiziellen Erweiterungen wie GTK, DBG, GD mit GIF-Support usw. zu liefern, die im offiziellen Release nicht enthalten sein dürfen.
Momentan ist die Zeit etwas knapp, da ich mit anderen Projekten beschäftigt bin, aber ich sehe die Zukunft von php4win in der Entwicklung eigener Erweiterungen für PHP.


Krause: Mit .NET kommt auch ASP.NET. Ist das nicht eine große Herausforderung für PHP? Wie sollte PHP darauf antworten?

Beulshausen: Mit ASP.NET (oder vielmehr C# und VB.NET) hat Microsoft starke Konkurrenz geschaffen, sowohl im Bereich Desktop als auch der Entwicklung von Webapplikationen. Es gibt jedoch mehrere Möglichkeiten, darauf zu antworten. Eine Möglichkeit wäre eine bessere Integration der RPC-Funktionalität (in Form von XML-RPC/SOAP), eine andere wäre die Anbindung an das .NET Framework. Es sollte auch konsequenter an der Entwicklung des PEAR-Frameworks gearbeitet werden. PEAR kann ein großer Pluspunkt von PHP bei der Wahl der Implementierungssprache werden.


Krause: Welche Rolle spielt PHP in Zukunft bei Desktop-Applikationen?

Wie ist das Verhältnis zwischen .NET WinForms und GTK dabei zu sehen?
Beulshausen: Keine große Rolle, auch PHP-GTK sehe ich nicht wirklich als Alternative zur Entwicklung von Desktop-Applikationen. Einen Gewinner beim Kampf WinForms/GTK+ kann ich nicht sehen, beide haben Vor- und Nachteile. WinForms beschränken sich auf absehbare Zeit auf die Windows-Plattform. GTK-Applikationen sind portabel, aber meist langsamer und mit enthaltenen Quellcodes.


Krause: Was war der Gedanke hinter PHP.NET? Wer steckt hinter der Entwicklung und wie viel Aufwand wurde investiert?

Beulshausen: Die PHP-Erweiterung wurde von mir innerhalb weniger Tage zur Präsentation der .NET-Technologie für den PHP-Kongress geschrieben. Deshalb gibt es einige Aspekte, die momentan verbessert werden müssten. Eine aufwändige Weiterentwicklung der Erweiterung ist jedoch nicht ratsam, da die Features der Zend Engine 1 unzureichend sind.
Wenn ich wieder etwas Zeit zur Verfügung habe, werde ich den Sourcecode der Erweiterung veröffentlichen und mir Gedanken machen, in welche Richtung die weitere Entwicklung gehen sollte.


Krause: Gibt es Pläne für die Zukunft in Bezug auf kommerzielle Angebote, ROI etc., oder wird die Entwicklung nur just for fun betrieben?

Beulshausen: Die Entwicklung des .NET-Supports für ZE1 war also mehr ein proof of concept. Die Entwicklung von PHP-Applikationen, die sich die .NET-Anbindung zunutze machen, ist mit der momentanen Anbindung etwas zu aufwändig.


Krause:.NET wird viele Sprachen unterstützen. Welche Chancen siehst du ausgerechnet für PHP, dort eine Rolle zu spielen?

Beulshausen: Ein großer Vorteil von PHP war immer seine Einfachheit. Es ist sehr einfach, in PHP Webapplikationen zu erstellen. Mittlerweile ist jedoch genau dies der Punkt, der es verhindert, dass PHP zur Entwicklung von Enterprise Level Applikationen benutzt wird. Die Zend Engine 2 wartet mit mehreren neuen Features auf, die es so zu implementieren gilt, dass professionelle Ansprüche erfüllt werden, jedoch der Vorteil der Simplizität gegenüber anderen Skriptsprachen nicht verloren geht.
Das .NET Framework ermöglicht Wege der Softwareentwicklung, die vollkommen neu sind. Da PHP die Sprache zur Entwicklung von Webapplikationen schlechthin ist, kann ich mir den Einsatz von PHP als Web Services-Provider gut vorstellen.


Krause: Ist mit der ZendEngine 2 eine Unterstützung als .NET Provider geplant und wann kann man damit rechnen. Wird dies den Ansprüchen professioneller Entwickler genügen?

Beulshausen: Auf dem Papier sehen die Features der ZE2 recht gut aus; es lässt sich jedoch schwer abschätzen, wann sie letztendlich das Feld betreten wird. Bis zur endgültigen Fertigstellung wird meines Erachtens noch gut ein halbes Jahr vergehen. Die ZE2 als .NET-Producer zu verwenden, ist sicherlich möglich. Wie die Implementierung aussehen kann, lässt sich momentan nicht genau sagen.


Vielen Dank für das Interview, Daniel


Daniel Beulshausen erreichen Sie über daniel@php4win.com und natürlich auf der Website für PHP für Windows: .



zur vorherigen Seite
zurück
an den Anfang der Seite
nach oben
Diesen Artikel drucken
drucken
Diesen Artikel weiterempfehlen
empfehlen

Software & Support Verlag GmbH