Sauberer PHP/HTML Programmierstil
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
beispiel
code
editor
ende
endeffekt
ersetzen
forum
http
inhalt
interpretieren
machen
meinung
problem
sektor
string
system
url
verwenden
zeile
-
Hallo Leute!
Ich wollte mal allgemein nachfragen, was eurer Meinung nach besserer oder sauberer Programmirstil ist.
Es geht um HTML Ausgaben verbunden mit PHP
Aus reiner Programmierlogik habe ich bisher immer den gesamten Inhalt meiner Seite in <?php ... ?> eingebettet und HTML Ausgaben komplett mit echo generiert, also etwa in der Art wie in folgendem Beispiel:
<html> <head>...</head> <body> <div id=content> <?php if(section = news) { echo "<h1>News</h1> <p>....</p>"; } else if (...) { ... } ?> </div> </body> </html>
Das Problem dabei ist, dass das Editor Syntax Highlighting hier nicht komplett funktioniert, und jeglicher HTML Code in echo "..." in der gleichen Farbe dargestellt wird. Diesbezüglich habe ich nun schon einige Male anderen Programmierstil gesehen, bei denen die PHP Segmente aufgeteilt werden und der HTML Code direkt ausgegeben wird, wodurch das Syntax Highlighting des Editors am effizientesten genutzt wird, das ganze allerdingsmeiner Meinung nach in der Struktur etwas unübersichtlicher wird.
<html> <head>...</head> <body> <div id=content> <?php if(section = news) { ?> <h1>News</h1> <p>....</p> <?php } else if (...) { ?> ... <?php } ?> </div> </body> </html>
Würde also gerne Mal von euch eure Meinung hören, was eurer Meinung nach sauberer gecoded ist bzw. wo ihr die Vor- und Nachteile in den einzelnen Varianten seht. Oder kennt ihr gar noch eine andere effiziente Lösung? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Es gibt Editoren, die dir auch HTML, JavaScript, SQL, ... in Strings highlighten können. PHPStorm kann dies beispielsweise.
Wie aber misterbasti schon erwähnt hat, solltest du noch besser PHP ganz von HTML trennen, indem du eine Template Engine verwendest. Für PHP ist Twig der kommende Standard was TE anbelangt. -
Schon fertig geschriebener HTML-Code mit mehreren kleinen php-Segmenten führt meines Wissens schneller zur Darstellung als wenn man auch den bloßen HTML-Code erst über echo produziert..
Gruß,
Christian -
thwjugend-marktschwaben schrieb:
Schon fertig geschriebener HTML-Code mit mehreren kleinen php-Segmenten führt meines Wissens schneller zur Darstellung als wenn man auch den bloßen HTML-Code erst über echo produziert..
Gruß,
Christian
Nicht zwangsweise. Wenn man nur einen einzigen PHP Block hat, wird der PHP Interpreter nur ein mal angeworfen. Wenn man aber dauernd zwischen PHP und HTML hin und her wechselt, entsteht ein nicht unbedeutenderr Overhead.
Aber um solche kleinen Performanceangelegenheiten sollte man sich nicht kümmern ;) Was nun schneller ist, ist absolut egal. Entscheidend ist nur, was sauberer ist. -
Wie wäre es mit einem MVC-Framework, z.B. Zend. Damit kann man fast sauber HTML, PHP und Datenbankzugriffe voneinander trennen.
-
nikic, Twig nutzt du, wird aber kein standart für ALLE. ich zb brauch und nutze es nicht, ich habe eigene engines und bekannte von mir die in der webentwicklung arbeiten nutzen eigene auf smarty basierende engines
es kann die umgebung bereits helfen einen richtigen schönen code zu haben. ich persönlich nutze im moment NetBeans IDE mit PHP plugin. ist seeeeehr gut fürs übersichtliche arbeiten. wenn ich jetzt sage besser als eclipse krieg ich haue^^ ist aber eigene meinung.
für das übersichtliche arbeitem mit PHP UND HTML probiere mal scriptly http://scriptly.webocton.de/ damit hab ich nur gute erfahrungen gemacht in dem bereich.
MVC designte frameworks mögen helfen, aber nicht zwangsweise zu besserem/schönerem code führen. ein bissel überwindung hilft =) wordpress hat einen schönen guide für übersichtlichen code:
http://codex.wordpress.org/WordPress_Coding_Standards
vllt kannst du damit was anfangen. -
Nabend die Damen,
also generell schließe ich mich Nikic und den anderen die für die Nutzung eines Template-Systems sind an. Ob der genutzte Editor wirklich etwas mit der Übersichtlichkeit des Codes zu tun hat kann ich nicht eindeutig bestätigen. Im Endeffekt ist dies auch NUR vom Benutzer abhängig, da man einen super Editor nutzen kann und trotzdem total durcheinander fuckeln. Ich persönlich benutze zum Beispiel den relativ gering gehaltenen Editor Notepad++ welcher eigentlich nur das Syntaxhighlighting in meinem Fall unterstützt.
Grundsätzlich ist also nicht das Programm dafür verantwortlich.
Zum eigentlichen Thema:
es gibt keine eindeutigen Richtlinien, aber wie bereits häufiger erwähnt ist es evtl. sinnvoll ein Template-System einzubauen. hierfür kann man auch einfach einmal ein System schreiben und es jedesmal wieder verwenden, da alle Varianten eh ähnlich aussehen werden. Dieses System ermöglicht es vorher die gesamten nötigen Daten zu berechnen/erstellen und hinterher unabhängig von der Berechnung einzufügen. Da die Frage des Aussehens eigentlich nur auftritt, wenn man etwas für die Nutzung Anderer und in Hinblick auf eventuelle Änderungen durch Andere schreibt, so ist das Template-System wohl am einfachsten zu überschauen und es ist auch am einfachsten abzuändern.
Ich hoffe das hat ein wenig geholfen.
Mit freundlichen Grüßen,
karlsve
PS: man kann auch einfach ein bestehendes Template-Engine verwenden, was allerdings evtl. nicht immer den eigenen Wünschen entspricht und es teilweise einfacher ist selbst ein Engine nach den persönlichen Anforderungen zu erstellen.
Edit: Im Endeffekt ist außerdem wirklich wichtig, dass der Code gut kommentiert und weniger wie er zusammengesetzt ist. Selbst vom Grundsatz her noch so unübersichtlicher Code kann durch eine gute Dokumentation verständlich werden.
Beitrag zuletzt geändert: 18.1.2011 0:32:54 von karlsve -
karlsve schrieb:
Guter Code dokumentiert sich meiner Meinung nach selbst
Edit: Im Endeffekt ist außerdem wirklich wichtig, dass der Code gut kommentiert und weniger wie er zusammengesetzt ist. Selbst vom Grundsatz her noch so unübersichtlicher Code kann durch eine gute Dokumentation verständlich werden.
Aber wie schon richtig gesagt wurde, gibt es keine eindeutigen Richtlinien, wie so ein Code gemacht sein muss. Ich persönlich beispielsweise bevorzuge, die ganze Ausgabe über echo zu generieren, wenn ich schon mit php arbeite. Dies bringt natürlich bei einigen Editoren Probleme beim Syntaxhighlighting, aber ich denke, dass dieser im HTML sowieso jetzt nicht so tragend ist.
Der Vorteil daran ist, dass man volle Kontrolle über die Ausgabe hat. So wird verhindert, dass beispielsweise unnötige Whitespaces vom Server gesendet werden müssen. Beispielsweise rutschen einem im HTML gerne mal ein paar Leerzeichen ans Ende einer Zeile. Hast du 20.000 Zeilen HTML-Code, wo bei jeder dann 3 Leerzeichen am Ende stehen, produzierst du schon knapp 60kb unnötigen Traffic. Dies lässt sich halt mit php genau kontrollieren. Um das mal an deinem Beispiel aufzuführen, so würde dein oben genannter Quellcode bei mir aussehen:<?php echo "<html>\n"; echo "\t<head>...</head>\n"; echo "\t<body>\n"; echo "\t\t<div id=content>\n"; if(section = news){ echo "\t\t\t<h1>News</h1>\n"; echo "\t\t\t<p>....</p>\n"; }else if(...){ ... } echo "\t\t</div>\n"; echo "\t</body>\n"; echo "</html>"; ?>
-
geekgirl schrieb:
karlsve schrieb:
Guter Code dokumentiert sich meiner Meinung nach selbst
Edit: Im Endeffekt ist außerdem wirklich wichtig, dass der Code gut kommentiert und weniger wie er zusammengesetzt ist. Selbst vom Grundsatz her noch so unübersichtlicher Code kann durch eine gute Dokumentation verständlich werden.
Aber wie schon richtig gesagt wurde, gibt es keine eindeutigen Richtlinien, wie so ein Code gemacht sein muss. Ich persönlich beispielsweise bevorzuge, die ganze Ausgabe über echo zu generieren, wenn ich schon mit php arbeite. Dies bringt natürlich bei einigen Editoren Probleme beim Syntaxhighlighting, aber ich denke, dass dieser im HTML sowieso jetzt nicht so tragend ist.
Der Vorteil daran ist, dass man volle Kontrolle über die Ausgabe hat. So wird verhindert, dass beispielsweise unnötige Whitespaces vom Server gesendet werden müssen. Beispielsweise rutschen einem im HTML gerne mal ein paar Leerzeichen ans Ende einer Zeile. Hast du 20.000 Zeilen HTML-Code, wo bei jeder dann 3 Leerzeichen am Ende stehen, produzierst du schon knapp 60kb unnötigen Traffic. Dies lässt sich halt mit php genau kontrollieren. Um das mal an deinem Beispiel aufzuführen, so würde dein oben genannter Quellcode bei mir aussehen:<?php echo "<html>\n"; echo "\t<head>...</head>\n"; echo "\t<body>\n"; echo "\t\t<div id=content>\n"; if(section = news){ echo "\t\t\t<h1>News</h1>\n"; echo "\t\t\t<p>....</p>\n"; }else if(...){ ... } echo "\t\t</div>\n"; echo "\t</body>\n"; echo "</html>"; ?>
Dann kannst du die ganzen \t und \n gleich auch weglasse, diese dienen sowieso nur der eigenen Lesbarkeit und nicht dem Browser zum interpretieren, machen bei dir also keinen Sinn. Wie willst du deinen Quellcode so wirklich verstehen, vor allem bei 20.000 Zeilen (selbst wenn davon 90% generiert sind)? Zusätzlich bedeutet das für Apache mehr zu interpretieren und ist seeehr viel mehr Schreibarbeit. Außerdem kann jeder moderne Editor Whitespaces anzeigen. Also ist das absolut(!) keine Lösung.
Eine Templateengine ist auch nicht immer zu empfehlen, da es keinen Unterschied macht, ob man <?=$var;?> oder %var% oder was auch immer schriebt.
Ein MVC-Framework macht ab ner bestimmten Größenordnung Sinn, ist aber trivial bei der Frage nach dem Programmierstil, da wir uns auch hierbei fragen müssen, ob man in der View inline-php oder ein Template-System verwendet.
/Edit:
Bei dem Beispiel des Threaderstellers:
<html> <head>...</head> <body> <div id=content> <?php if(section = news) { ?> <h1>News</h1> <p>....</p> <?php } else if (...) { ?> ... <?php } ?> </div> </body> </html>
Kann man es noch weiter vereinfachen:
<html> <head>...</head> <body> <div id=content> <?php if(section = news) : ?> <h1>News</h1> <p>....</p> <?php elseif(...) : ?> ... <?php else : ?> ... <?php endif; ?> </div> </body> </html>
Das wäre zB auch meine bevorzugte Schreibweise.
Beitrag zuletzt geändert: 18.1.2011 1:24:17 von trueweb -
trueweb schrieb:
Der HTML-Quellcode lässt sich auch so wie ich finde recht gut lesen. Natürlich ist die Notation nun nur ein persönlicher Tick von mir. Man könnte auch die originalen Whitespaces nehmen, wobei ich dies im Grunde nicht so übersichtlich finde. Beispielsweise könnten anstelle von einem Tabulator auch acht Leerzeichen stehen, welche am Ende acht mal so viel Traffic produzieren.
Dann kannst du die ganzen \t und \n gleich auch weglasse, diese dienen sowieso nur der eigenen Lesbarkeit und nicht dem Browser zum interpretieren, machen bei dir also keinen Sinn. Wie willst du deinen Quellcode so wirklich verstehen, vor allem bei 20.000 Zeilen (selbst wenn davon 90% generiert sind)? Zusätzlich bedeutet das für Apache mehr zu interpretieren und ist seeehr viel mehr Schreibarbeit. Außerdem kann jeder moderne Editor Whitespaces anzeigen. Also ist das absolut(!) keine Lösung.
Was die "Interpretation" angeht, würde ich sagen, dass das wenig unterschied macht. Natürlich ist es einfacher, wenn der Apache nur reines HTML nehmen und senden muss. Aber ansich macht es keinen merkbaren Unterschied, ob er nun 20.000 echo's interpretieren muss, oder fünf. Auf halbwegs modernen Servern sollte das in weniger als einer Millisekunde verarbeitet sein.
Ein weiterer Vorteil ist die Organisation. Wenn es an 18-fach verschachtelte kondition-schleifen-kombinationen geht, bringt es einem wenig, wenn man mit der php-einrückung und der html-einrückung und dann noch möglichst ohne tabulatoren dann irgendwo im Nirvana endet. Das erhöht die Lesbarkeit keineswegs.
Wie schon gesagt handelt es sich dabei um meine persönlich Meinung, wie ich sowas gerne gestalte. Ich halte es halt für einfacher, reinen php-code zu lesen, als ständig irgendwo etwas eingeschoben zu sehen. -
Wow, ist ja eine richtig hitzige Diskussion hier entanden, sehr schön =)
Ich persönlich verwende Eclipse mit PHP Plugin weil ich damit sehr gute Erfahrungen gemacht habe und auch ein wenig C++ und JAVA in Eclipse programmiere, so habe ich alles beisammen.
Das Template system finde ich sehr interessant, wird aber sicherlich schnell hinfällig, wenn etwas komplexe Sturkturen entstehen, oder? Vernwedet zum Beispiel die LimaCity Community solche Templates? Hier gibt es ja auch relativ komplerxe Strukturen mit Benutzerverwaltung, eingaben durch Benutzer (Forum), Nachrichtensystem, und und und. Da stroßen Templates sicherlich an ihre grenzen, oder habe ich da etwas falsch verstanden?
Die von trueweb angegebene Schreibweise mit doppelpunkten statt geschweiften Klammern habe ich auch schon gesehen, ist mir aber irgendwie doch ein Dorn im Auge. Die geschweiften Klammern gehören für mich einfach dazu, auch wenn sie vielleicht das ganze ein klein wenig komplizierter machen, aber dadurch sind meiner Meinung nach Abschnitte klarer definiert.
Auf jeden Fall sammeln sich hier viele Anregungen die ich mir alle mal anschauen werde. -
beachteam schrieb:
Das Template system finde ich sehr interessant, wird aber sicherlich schnell hinfällig, wenn etwas komplexe Sturkturen entstehen, oder? Vernwedet zum Beispiel die LimaCity Community solche Templates? Hier gibt es ja auch relativ komplerxe Strukturen mit Benutzerverwaltung, eingaben durch Benutzer (Forum), Nachrichtensystem, und und und. Da stroßen Templates sicherlich an ihre grenzen, oder habe ich da etwas falsch verstanden?
Die Template-Systeme sind eigentlich für die grobe Aufteilung der Seiten zuständig. Sie ermöglichen eine möglichst einfache Strukturierung. Man kann damit festlegen, wo z.B. Kopf, Navigation und der Hauptinhalt der Seite angezeigt werden sollen.
Das wird dann durch einen Parser an den entsprechenden Stellen eingefügt.
Hier mal eben ein kurzes Beispiel.
HTML von einem Template:
... <body> <div id="kopf"> #kopf# </div> <div id="nav"> #nav# </div> <div id="inhalt"> #inhalt# </div> </body>
Das ganze wird in dem PHP-Script der Seite eingebunden und die #inhalt#, usw. Bestandteile des HTML-Codes werden durch die tatsächlichen Teile der resultierenden Seite eingebunden. Somit kann man jegliche Inhalte dynamisch generieren und anzeigen lassen, all das jedoch nach dem selben Grundgerüst.
MfG
karlsve
Edit: Hier noch nen kurzes Beispiel. Dieses ganze CMS wurde von telelo mit einem Template-System gebastelt. Ähnlich ist es bei Wordpress und anderen fertigen Paketen.
Und noch ein Beispiel von mir selbst: http://personal.karlsve.de/
Beitrag zuletzt geändert: 20.1.2011 0:33:23 von karlsve -
Hm ok, interessanter dabei wäre die PHP File.
Nach dem Schema arbeite ich auch schon, allerdings dann auf die Art:
include_once('MyShow.php'); $show = new MyShow(); <body> <div id="kopf"> <?php $show->createHeader() ?> </div> <div id="nav"> <?php $show->createNav() ?> </div> <div id="inhalt"> <?php $show->createContent() ?> </div> </body>
Wobei ich dann eben in der MyShow.php file die Funktionen habe, welche dynamisch die einzelnen elemente kreieren. Da ist der Schritt zum Template System dann ja eigentlich nicht weit. -
Hier ist mal eine relativ simple Variante des PHP-Teils.
<?php $document = file_get_contents("templates/" . $config->template . "/index.php"); $parse = array( "#kopf#" => $header, "#title#" => $title, "#navigation#" => $menu, "#inhalt#" => $content, "#footer#" => $footer ); // parse $document = str_replace(array_keys($parse), $parse, $document); ?>
Die Variablen werden vorher gefüllt und dann die im Dokument enthaltenen eingefügt.
Ich hoffe es hilft ein wenig das zu verstehen.
Mit freundlichen Grüßen,
karlsve -
also ...
zu Einfärbung des HTML-Codes ... ich bin mir nicht sicher, ob das wirklich etwas bringt. Allerdings! (Auch) In meinem Lieblingseditor (Komodo Edit [v6] <andere habe ich auch probiert - die brachten nichts außer Chaos>) kannst beinahe alle Sprachen auswählen - und das zu jeder Zeit natürlich - unter 'View/View as Language/...Other'. (Da findest sicher einige, die dir unbekannt sind ;o)
Alle Editoren (die besseren) müssen das können (wo liegt dein Problem?).
Und zum Schluss, zum 'template engine': wikipediaPHP selbst ist bereits so entworfen, dass man programmiersprachliche Konstrukte mit der textuellen Ausgabe über Platzhalter bzw. gekennzeichnete Bereiche mischen kann. Die Verwendung einer gesonderten Template Engine für PHP ist deswegen eigentlich nicht erforderlich.
'programmiersprachliche Konstrukte' ... 'textuellen Ausgabe über Platzhalter' ... (PLATZALTER! nach Platzhaltern sucht man nicht, sie HAT MAN EINFACH!!) das wird dann teils so wild, dass man aus Variable-variablen Variable-variablen machen kann ... und so fort. Dann weißt du - wo möglich - nicht mehr, ob zuerst die Henne, oder das Ei ... ???? (aber das ist natürlich auch nicht das Ziel)
dennoch ... hier zwei Beispiele in einem Programm (source code):
1. die Variante die uns @karlsve gezeigt hat (in meinem Test), die in einer Textpassage etwas sucht und ersetzt **, ... und
2. das, was ich verwende. Diese Art ist bis zu ~10^3 mal schneller(!!), was man in der letzten Zeile der Ausgabe von beiden Tests sehen kann. (Es handelt sich dabei um die Schnelligkeit des Servers und nicht um die Schnelligkeit der Darstellung [rendering] im Browser!)
Die Erklärung ist sehr einfach: ich verwende nicht 'suchen und ersetzen**', sondern 'text-concatenation'. No!? Dann "Mahlzeit" die Damen!! (aber auch die Herren :o) und viel Spaß beim Weitertesten.
lg eure hemiola
**) in einem Text nach irgend etwas zu suchen, ist eine hochkomplizierte Angelegenheit. Wer es nicht glaubt, sollte mal versuchen, so etwas zu programmieren ;o) -
@hemiolos: Ich glaube dein letzter Beitrag entstand aus Ignoranz heraus. Tempalte-Systeme, funktionieren *nicht* durch Suchen und Ersetzen. Von unerfahrenen Programmierern selbstgeschriebene Template-Systeme vielleicht schon. Professionelle jedoch nicht.
Alle großen Template-Systeme kompilieren nämlich das Template mit der Designer freundlichen und auf Templates spezialisierten Syntax zu ... PHP Code! Da ist nichts mit langsamem Ersetzen. Am Ende wird einfach nur der schnelle PHP Code ausgeführt.
Wenn dich genauer interessiert, wie das funktioniert, habe ich eine kleine Einführung geschrieben, in der man mit recht wenig Code ein voll funktionsfähiges Template-System schreibt. (Auch wenn ich die Nutzung von Twig natürlich empfehle.)
Aber auch ohne diesen Punkt ist dein Benchmark etwas unfair: Um fair zu sein müsstest du zuerst die tausend Zeilen mit #content# generieren und dann erst #content# ersetzen. Du wirst sehen, dass geht deutlich schneller ;) -
Hm also dem OP gleich zu einem Framework zu raten ist denk ich zu viel des Guten, auch wenn es auf lange Sicht dem Programmierstil nicht schadet.
Meiner Meinung nach gab es eine Notation um mehrzeilige Strings in PHP zu schreiben, welche selten genutzt wird:
$string = <<<meinstring <html> <head> </head> <body> ... </body> </html> meinstring;
Das ganze heißt glaub ich heredoc-String und ich glaube es wird von den meisten IDEs darin die HTML-Syntax korrekt gehighlighted.
Grüße,
Sektor -
sektor schrieb:
Es gab nicht nur, es gibt noch immer!. Ob es selten verwendet wird? Ich lebe oft und gern damit und kann allen raten, das zu tun. Gute Erfindung.
... Meiner Meinung nach gab es eine Notation um mehrzeilige Strings in PHP zu schreiben, welche selten genutzt wird:
Das ganze heißt glaub ich heredoc-String und ich glaube es wird von den meisten IDEs darin die HTML-Syntax korrekt gehighlighted
Es ist richtig, auch dann, wenn du schon gepostetes wiederholst ;o)
lg -
$string = <<<meinstring <html> <head> </head> <body> ... </body> </html> meinstring;
und wieder was dazugelernt ^^
gefällt mir sehr gut... ist mir irgendwie in meinen php-selbsttudien entgangen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage