Was ist der "PHP-Weg"?

8

Ich sehe ständige Verweise auf den "Weg", wie Beschreibungen eines bestimmten Frameworks oder einer bestimmten Anwendung als "Pythonic", eine bestimmte Person als "Perl-Hacker" oder "echter Ruby-Code", aber wo sind die "PHP-Hacker"? die "PHP-ic" -Anwendungen, der "wahre PHP-Stil"?

Das brachte mich zum Nachdenken - hat PHP überhaupt einen bestimmten Stil? Zu sagen, dass PHP leicht in andere Stile "geändert" werden kann, zählt nicht, da dies auch für jede vernünftige Sprache gilt.

Jede Eingabe wird sehr geschätzt.

Jonathan Chan
quelle
3
"Wenn es immer noch funktioniert, ist es noch nicht fertig"
Sevenseacat
quora.com/How-does-a-programmer-become-a-brogrammer - vielleicht könnten wir es "PHmoronic" nennen?
Psr

Antworten:

13

Im Gegensatz zu vielen anderen Programmiersprachen hat PHP weder einen einheitlichen Gedanken noch eine Reihe von Kernideen: Es begann als sehr pragmatischer Satz von Perl-Skripten, und Funktionen wurden nach Bedarf ohne großen formalen Entwurfsprozess hinzugefügt. Das Ergebnis ist eine Sprache, die sehr nützlich und vollständig ist, aber für sich genommen nicht sehr konsistent. Die immense Popularität der Sprache macht die Sache noch schlimmer; Sobald eine neue Funktion eingeführt wird, ist sie praktisch in Stein gemeißelt, da jeder damit beginnt. Ein paar Designfehler wurden auf diese Weise konsolidiert, und das PHP-Team hat es wirklich schwer, die Leute dazu zu bringen, sich von ihnen zu entfernen - register_globalsund dies magic_quotessind nur zwei Beispiele für Dinge, die zu dieser Zeit als gute Ideen erschienen, sich jedoch als weit verbreitet erwiesen haben.

Ein weiterer Faktor ist die Kultur, die um PHP herum gewachsen ist. Als seine Popularität zu wachsen begann, bestand der typische Anwendungsfall für PHP darin, kleine Ausschnitte der serverseitigen Funktionalität in ansonsten statische HTML-Dokumente einzufügen. Ein großer Teil der Zielgruppe waren Hobbyisten und Nicht-Programmierer, die PHP verwendeten, um ihren statischen Websites ein bisschen dynamisches Material hinzuzufügen. Die daraus resultierende Kultur ist sehr pragmatisch, ohne großes Interesse daran, einen „richtigen Weg“ zu finden. Während es möglich ist, recht elegantes PHP zu schreiben, interessiert sich ein großer Teil der Benutzergemeinschaft einfach nicht dafür, solange es funktioniert.

Im Gegensatz dazu hatten Sprachen wie Python, Ruby, Lisp, C #, Haskell und andere von Anfang an eine Philosophie, und die Community nimmt sie im Allgemeinen an und drängt die Sprache, ihr gerecht zu werden. (Wenn Sie interessiert sind, geben Sie import thiseine interaktive Python-Sitzung ein.) Eine Philosophie zu haben bedeutet, dass es eine Richtlinie für die Verwendung und Erweiterung der Sprache gibt, und sie führt auch zu einer homogeneren Gemeinschaft. Wenn Sie mit der Philosophie nicht einverstanden sind, gehen Sie eher weg und finden eine, die besser zu Ihnen passt ;; Es ist wahrscheinlicher, dass die resultierende Gemeinschaft einen Konsens über alle möglichen Dinge erzielt.

Das heißt, PHP hat Stärken und Schwächen sowie obskure Randfälle; Das Schreiben von idiomatischem PHP-Code bedeutet, die Stärken zu nutzen und die Schwächen und Unklarheiten zu vermeiden, genau wie bei jeder anderen Sprache.

tdammers
quelle
Inwiefern ist PHP nicht konsistent? Die bloße Einfachheit der Sprache führt zu einer extrem orthogonalen Sprache, bei der Sie nie erraten müssen, welche Syntax verwendet werden soll. Insbesondere komplexe Datenstrukturen (Bäume, verknüpfte Listen, Randgraphen) werden fast genauso gut behandelt wie in Python und sicherlich besser als in Java oder C ++ STL.
James Anderson
3
PHP fügt alles in den globalen Namespace ein. Die verschiedenen API-Funktionen verwenden unterschiedliche Namenskonventionen. Einige von ihnen ändern ihre Argumente direkt, während andere in einer ähnlichen Situation das geänderte Argument zurückgeben. Nur die Hälfte der Zeichenfolgenfunktionen ist als mb_XXX () -Versionen verfügbar. Es gibt drei Arten von Variablen mit unterschiedlichen Scoping-Regeln, Sie rufen eine Funktion auf, um eine Konstante zu definieren, Sie können (müssen aber nicht) eine Funktion aufrufen, um eine globale Variable zu erstellen oder zu lesen, ich könnte ewig weitermachen.
tdammers
@tdammers PHP platziert nicht "alles" im globalen Raum, während sich viele Funktionen im globalen Namespace befinden, viele andere nicht - siehe zum Beispiel PDO oder SPL. Globale, lokale und statische Variablen existieren in vielen Sprachen und sind in keiner Weise für PHP einzigartig. Sie können Konstanten definieren, ohne eine Funktion aufzurufen. Sie können eine Funktion schreiben, die auf Globals zugreift (es ist eine Art Sinn, Globals zu haben), aber daran ist absolut nichts auszusetzen.
StasM
Ich denke, aus dem einfachen Grund, dass diese Antwort tatsächlich die Behauptungen stützt, sollte sie als beste Antwort ausgewählt werden, aber die anderen Antworten waren auch sehr hilfreich (und haben mir geholfen zu erkennen, wie viel Argument eine solche Frage bringen kann!)
Jonathan Chan
15

Ich denke, wenn Leute den PHP-Weg sagen, hat er ein negatives Gewicht, das ist der Begriff, den wir in einem Polygot-Shop (Python, C #, Ruby) verwendet haben. Zum Beispiel "Just-do-it-and-Throw-it-out there", wie es in Gots vorkommen könnte, undichte Dateihandles, SQL-Injection-Schwachstellen, super tiefe verschachtelte Schleifen, 3000-Zeilen-Funktionen und immer noch als " PHP-Weg '. Wenn mir in einem Peer Review jemand sagte, dass der Code sehr "PHP-artig" ist, wäre ich zutiefst beleidigt.

Ich schätze, dass dies einige Flammen verursachen wird, daher werde ich anerkennen, dass es Leute gibt, von denen bekannt ist, dass sie guten PHP-Code produzieren, und PHP wird in einigen großen Produktionsstätten verwendet. Ich sage nur, was die Menge am häufigsten denkt und sieht, die Meinung wird von den Handlungen der Mehrheit getragen, nicht von der Minderheit.

sa93
quelle
5
Lustige Sache ist alles, was Sie erwähnt haben, hat absolut nichts mit PHP zu tun - und bis vor kurzem hatte es nicht einmal goto, also gibt es keine Möglichkeit, dass es so viel PHP-Code mit goto's gibt, dass es einem bestimmten Stil den Namen gab.
StasM
StasM man kann in jeder Sprache ein Monster mit nicht wartbaren, unsicheren oder schlechten Leistungen (oder einer Mischung aus allen) erschaffen. Der VM / Interpreter ist heutzutage selten das Problem. Was ich damit sagen will, ist, dass die niedrige PHP-Eintrittsbarriere, die Verschmutzung durch globale Namespaces und andere Merkmale / Nachteile der Sprachen eine Menge von Wurf-es-zusammen-anziehen und daher den Ruf anziehen. Es ist ein unbestreitbarer Ruf, ich habe nur versucht, etwas Licht darauf zu bringen
sa93
StasM, Sie haben den Punkt verpasst, ich habe nie gesagt, dass er gotos beinhalten würde.
Sa93
3
@ sa93 - Ich bin ein großer PHP-Fan und benutze es seit PHP3. StasM ist ziemlich korrekt - die meisten Leute halten die PHP-Ausgabe für schlecht. Dies hat einen guten Grund, das meiste davon. Ich muss nur damit leben, auf der positiven Seite, es macht es ziemlich einfach, im PHP-Contracting zu glänzen.
Jonno
Ich habe viel J2EE-Code gesehen, der viel schlimmer ist als jeder PHP-Code, den ich gesehen habe.
James Anderson
4

Wenn es einen "PHP-Weg" gibt, ist es "Mach es einfach!".

Obwohl PHP über alle modernen OO-Konstrukte verfügt, die Klassen, Modul-Namensräume, Introspektion usw. sowie alle dynamischen Programmier-Extras enthalten, die normalerweise mit mehr modifizierbaren Sprachen wie Python verbunden sind. Sie sehen sie selten nur deswegen verwendet, oder sehen, dass PHP-Programmierer von der "Reinheit" ihrer Implementierung besessen sind.

Ich habe keine Ahnung, warum es so einen kulturellen Unterschied geben sollte - aber da ist es da.

Es gibt eine Reihe von Schrecken da draußen und dies spiegelt vielleicht wider, dass so viel "PHP" -Code "My First Webapp" oder sogar "My First Program" ist.

Persönlich finde ich es ziemlich einfach, professionell geschriebenen PHP-Code zu lesen / zu verstehen. Im Allgemeinen ist es viel einfacher zu lesen als Java-Apps alle Factory-Klassen und die Hälfte der Logik in XML-Dateien.

James Anderson
quelle
4

Ich würde sagen, der PHP-Weg ist der "Duct Tape Programmer" - schnell versenden, schnell versenden, sich später um alles andere kümmern und Fehler schnell beheben, ohne an die Zukunft zu denken. Während dies in keiner Weise eine Verurteilung von PHP selbst ist (Sie können dies in jeder Sprache tun), haben sich PHP-Entwickler erst vor kurzem über Software-Engineering- und Design-Muster, SOLID, Tests und dergleichen Gedanken gemacht.

Wayne Molina
quelle
2

Ich würde sagen, die Idee von PHP ist praktisch. Was es in jedem einzelnen Fall bedeutet, ist schwer zu definieren, aber wenn zum Beispiel etwas ein HTML-Formular und fünf Codezeilen erfordert, platzieren Sie dort kein MVC-Framework mit 20 Klassen. Wenn Sie dagegen eine Anwendung für 20 Millionen Benutzer entwickeln, platzieren Sie das Framework dort und verfügen Sie über Logik, Präsentation und Flusskontrolle. Aber PHP hat hier nichts Besonderes, daher ist es möglicherweise keine zufriedenstellende Antwort.

Ich glaube nicht, dass es einen PHP-Stil gibt. Ich persönlich denke, dass die Vorstellung, dass es einen Stil gibt, der für alle Sprachbenutzer geeignet ist, nur dann Sinn macht, wenn die Sprache einen sehr eingeschränkten Anwendungsbereich hat, was für PHP definitiv nicht zutrifft.

Bestimmte Anwendungen haben ihre Stile. Wenn Sie sich beispielsweise mit Zend Framework befassen, sehen Sie sehr viel OO-Code mit definierten Schnittstellen, kontrollierten APIs usw., in denen Sie bekannte Entwurfsmuster leicht erkennen können. Auf der anderen Seite gibt es Anwendungen wie Drupal, die eher prozedural vorgehen.

Ich verstehe, dass das nicht viel von "echtem PHP-Stil" gibt, aber das liegt wahrscheinlich daran, dass es so etwas nicht gibt. Es gibt Best Practices usw., aber ich fürchte, es ist nicht das, wonach Sie suchen.

StasM
quelle
1

Einige Leute benutzen PHP als Zeichen der Verachtung - nur eine Tatsache, persönlich bin ich ein Fan.

Für mich ist das, was einen PHP-Ansatz definiert hat, im Wesentlichen das Fehlen eines Anwendungskontexts. Im Vergleich zu .NET oder der Java-Welt gibt es keinen integrierten Anwendungskontext.

Dies führt dazu, dass PHP-Server im Wesentlichen zustandslos sind (solange Sitzungen auf einen anderen Server verschoben werden, z. B. eine gemeinsam genutzte Festplatte oder Datenbank).

Das ist so ziemlich das, woran ich denke, wenn ich an den PHP-Weg denke.

Jonno
quelle
1

Noch eine Antwort! Diesmal ist es eher eine Beobachtung der "Kultur" des Programmierens.

PHP befindet sich in der gleichen Position wie Javascript (ECMAscript für Pedanten!) Im Jahr 2002. Eine kleine Gruppe von erfahrenen Programmierern schätzte seine hervorragende Leistung. Die allgemeine Meinung war, dass es eine schlechte und obskure Skriptsprache war, die nur zum Scrollen von Bannern und nervigen Benutzern nützlich war mit Popups.

Dann kam AJAX und plötzlich war die ganze Welt voller Ehrfurcht vor der Kraft und Eleganz von Javascript.

Obwohl PHP nicht so elegant wie Javascript ist, teilt es doch einen großen Teil der Leistungsfähigkeit und Einfachheit dieser Sprache, und es besteht ein Konsens darüber, wie PHP für große Systeme "richtig" programmiert werden kann.

Der andere Indikator dafür, wie gut PHP in seinem Fachgebiet ist, ist das Fehlen von Frameworks für die meisten ernsthaften Anwendungen. Viele sehr erfahrene Programmierer verwenden gerne nur "PHP", wie es ohne die Hilfe eines Mega-Frameworks steht. Die schiere Verbreitung von Frameworks und anderen Hilfsmitteln zeigt mir, dass Java, Python usw. es nicht richtig verstanden haben und dass Programmierer, die diese Sprachen verwenden, zutiefst unglücklich und unsicher sind, wie eine Webanwendung erstellt werden soll. Wenn sie jedoch sehen, wie einfacher PHP-Code verwendet wird, um komplexe Websites ohne die unlesbaren XML-Konfigurationen, den Vorlagendialekt des Monats oder den eigenen ORM-Dialekt erfolgreich zu implementieren, ziehen sie die falsche Schlussfolgerung - dass der PHP sein muss schlecht, weil es keine IntegerFactory-Klassen, Abhängigkeitsinjektion usw. gibt.

Tatsächlich lassen sich all diese Dinge leicht in PHP implementieren und werden häufig bei Bedarf verwendet - es ist nur so, dass die Implementierung normalerweise aus ein paar Zeilen PHP besteht und von Programmierern, die es gewohnt sind, dasselbe mit massiven zu tun, nicht als solche erkannt wird Bibliotheken und komplexe APIs.

PHP ist einfach. "einfach" ist die höchste Ergänzung, die Sie einer Software geben können, und die am schwersten zu erreichende.

James Anderson
quelle