Gepostet von ShiningRay am 3. April 2006
Edwin Martin < [email protected] >
Übersetzt von: ShiningRay @ Nirvana Studio
Ich entwickle seit vier Jahren PHP-Anwendungen. PHP ist wirklich einfach zu schreiben. Aber PHP weist auch einige sehr schwerwiegende Mängel auf.
Im Folgenden werde ich meine Gründe darlegen, warum PHP nicht für Websites geeignet ist, die größer als kleine Amateur-Websites sind.
1. Schlechte Unterstützung für Rekursion Rekursion ist ein Mechanismus, mit dem Funktionen sich selbst aufrufen. Dies ist eine leistungsstarke Funktion, die etwas Komplexes in etwas sehr Einfaches verwandeln kann. Ein Beispiel für die Verwendung von Rekursion ist Quicksort. Leider ist PHP nicht sehr gut in der Rekursion. Zeev, ein PHP-Entwickler, sagte: „PHP 4.0 (Zend) verwendet einen Stack-Ansatz für dichte Daten anstelle eines Heap-Ansatzes. Dies bedeutet, dass die Anzahl der rekursiven Funktionen, die es tolerieren kann, deutlich weniger begrenzt ist als bei anderen Sprachen.“ . Das ist eine sehr schlechte Ausrede. Jede Programmiersprache sollte eine gute Rekursionsunterstützung bieten.
2. Viele PHP-Module sind nicht threadsicher. Vor einigen Jahren veröffentlichte Apache die Version 2.0 des Webservers. Diese Version unterstützt den Multithreading-Modus, bei dem ein Teil der Software mehrere Teile gleichzeitig ausführen kann. Der Erfinder von PHP sagt, dass der Kern von PHP threadsicher ist, Nicht-Kernmodule jedoch möglicherweise nicht. In neun von zehn Fällen möchten Sie dieses Modul jedoch in einem PHP-Skript verwenden, was jedoch dazu führt, dass Ihr Skript nicht mit dem Multithread-Modus von Apache kompatibel ist. Aus diesem Grund empfiehlt das PHP-Team nicht, PHP im Multithread-Modus von Apache 2 auszuführen. Die schlechte Unterstützung des Multithread-Modus von PHP wird oft als einer der Gründe dafür angeführt, dass Apache 2 nach wie vor unbeliebt ist.
Bitte lesen Sie diese Diskussion: Slashdot: Sites Rejecting Apache 2?
3. PHP ist aus geschäftlichen Gründen kaputt Durch den Einsatz von Caching kann die Leistung von PHP um 500 % gesteigert werden [siehe Benchmark]. Warum ist Caching nicht in PHP integriert? Da Zend, der Hersteller von PHP, seinen eigenen Zend Accelerator verkauft, möchte er sein kommerzielles Produkt natürlich nicht aufgeben.
Aber es gibt noch eine andere Alternative: APC (Zend brachte später Zend Optimizer auf den Markt, einen kostenlosen Beschleuniger – Übersetzer)
4. Kein Namespace Stellen Sie sich vor, jemand hat ein PHP-Modul zum Lesen von Dateien erstellt. Eine Funktion im Modul heißt read. Dann kann das Modul einer anderen Person die Webseite lesen, die auch eine Lesefunktion enthält. Dann können wir diese beiden Module nicht gleichzeitig verwenden, da PHP nicht weiß, welche Funktion Sie verwenden möchten.
Es gibt jedoch eine sehr einfache Lösung: Namespaces. Jemand hat einmal vorgeschlagen, diese Funktion zu PHP5 hinzuzufügen, aber leider hat er dies nicht getan. Ohne Namespaces muss nun jeder Funktion der Modulname vorangestellt werden, um Namenskonflikte zu vermeiden. Dies führt zu schrecklich langen Funktionsnamen wie xsl_xsltprocessor_transform_to_xml, was das Schreiben und Verstehen des Codes erschwert.
5. Nicht standardmäßige Datumsformatzeichen Viele Programmierer sind mit Datumsformatzeichen vertraut, die aus den Sprachen UNIX und C stammen. Mehrere andere Programmiersprachen haben diesen Standard übernommen, aber seltsamerweise verfügt PHP über einen eigenen Satz völlig inkompatibler Datumsformatzeichen. In C repräsentiert „%j“ den Tag des Jahres und in PHP den Tag des Monats. Um die Sache jedoch noch verwirrender zu machen: Die strftime-Funktion und die date_format-Funktion von Smarty (einer beliebten PHP-Template-Engine) verwenden C/UNIX-Formatierungszeichen.
6. Verwirrende Lizenz Sie könnten denken, dass PHP kostenlos ist, ebenso wie alle im Handbuch erwähnten PHP-Module. Falsch! Wenn Sie beispielsweise PDF-Dateien in PHP generieren möchten, finden Sie im Handbuch zwei Module: PDF und ClibPDF. Beide sind jedoch kommerziell lizenziert. Daher müssen Sie für jedes Modul, das Sie verwenden, sicherstellen, dass Sie dessen Lizenz zustimmen.
7. Inkonsistente Regeln für die Benennung von Funktionen. Einige Funktionsnamen bestehen aus mehreren Wörtern. Im Allgemeinen gibt es drei Arten von Wortkombinationen:
direktes Zusammenfügen: getnumberoffiles
Durch Unterstriche trennen: get_number_of_files
Kamelgesetz: getNumberOfFiles
Wählen Sie für die meisten Sprachen eine davon aus. Es wird aber PHP verwendet.
Wenn Sie beispielsweise einige Sonderzeichen in HTML-Entitäten umwandeln möchten, verwenden Sie die Funktion htmlentities (Wörter direkt verbinden). Wenn Sie die gegenteilige Funktionalität nutzen möchten, müssen Sie seinen kleinen Bruder html_entity_decode verwenden. Aus einem besonderen Grund enthält dieser Funktionsname Wörter, die durch Unterstriche getrennt sind. Wie könnte das sein? Sie wissen, dass es eine Funktion namens strpad gibt. Oder ist er str_pad? Jedes Mal müssen Sie überprüfen, was das Symbol ist, oder einfach auf einen Fehler warten. Bei Funktionen wird die Groß-/Kleinschreibung nicht beachtet, daher gibt es für PHP keinen Unterschied zwischen rawurldecode und RawUrlDecode. Das ist auch deshalb schlecht, weil beide verwendet werden und unterschiedlich aussehen, was den Leser verwirrt.
8. Die Hölle der magischen Anführungszeichen Magische Anführungszeichen können PHP-Skripte vor SQL-Injection-Angriffen schützen. Das ist gut. Aus bestimmten Gründen können Sie diese Konfiguration jedoch in php.ini deaktivieren. Wenn Sie also ein flexibles Skript schreiben möchten, müssen Sie immer überprüfen, ob magische Referenzen aktiviert oder deaktiviert sind. Ein solches „Feature“ soll das Programmieren erleichtern, tatsächlich macht es es aber komplizierter.
9. Fehlen eines Standard-Frameworks Eine wachsende Website ohne ein umfassendes Framework wird irgendwann zu einem Wartungsalbtraum werden. Ein Framework kann viele Aufgaben erleichtern. Das derzeit beliebteste Framework-Modell ist das MVC-Modell, bei dem Präsentationsschicht, Geschäftslogik und Datenbankzugriff getrennt sind.
Viele PHP-Websites verwenden nicht das MVC-Modell. Sie haben nicht einmal einen Rahmen. Schon jetzt gibt es einige PHP-Frameworks, und Sie können selbst eines schreiben. Die Artikel und Handbücher über PHP verbessern das Framework kein Wort. Während JSP-Entwickler Frameworks wie Struts und ASP-Entwickler .Net verwenden, scheinen diese Konzepte von PHP-Entwicklern weitgehend verstanden zu werden. Das zeigt, wie professionell PHP tatsächlich ist.
Zusammenfassen
Was ist das Problem?
Für sehr kleine Projekte kann es eine sehr zufriedenstellende Programmiersprache sein. Doch bei größeren und komplexeren Projekten zeigt PHP seine Schwächen. Wenn Sie weiter forschen, werden Sie Lösungen für einige der von mir genannten Probleme finden. Wenn die Lösung also erst einmal bekannt ist, warum nicht sie beheben? Und warum werden diese Korrekturen nicht im Handbuch erwähnt?
Es ist gut, dass eine Open-Source-Sprache sehr beliebt ist. Aber leider ist es keine großartige Sprache. Ich hoffe, dass eines Tages alle Probleme gelöst werden (vielleicht in PHP6?) und wir dann eine Open-Source-Sprache haben, die sowohl Open Source als auch einfach zu verwenden ist.
Wenn Sie mittlerweile ein Projekt mit mehr als 5 Skriptseiten starten möchten, sollten Sie besser C#/ASP.Net oder Java/JSP in Betracht ziehen, oder vielleicht ist auch Python die bessere Wahl.
Quelle dieses Artikels: http://workgroup.cn/CS/blogs/php/archive/2006/06/29/1354.aspx