Programmierstil
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
atomkraft
ausgabe
befehl
code
ersetzen
funktion
logik
mache
meinung
methode
mist
nutzer
programmierung
string
switch
text
url
versuchen
verwenden
weiterer text
-
Hallo,
ich wollte mal in die Runde fragen, wie Ihr mit PHP programmiert.
Ich z.B. lege immer viel Wert auf die Richtigen Einrückungen und Übersicht;
habe eine lange Zeit immer nur mit Funktionen und verschachtelten ifs gearbeitet, nun steige ich mit einem guten Buch auf objektorientierte Programmierung um und nutze zunehmend den Befehl switch.
Wie programmiert Ihr?
Worauf legt ihr bei der Programmierung besonders viel Wert?
gysueaktueller -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
gysueaktueller schrieb:
Worauf legt ihr bei der Programmierung besonders viel Wert?
Darauf, daß es möglichst effizient und sicher funktioniert. Alles andere ist persönliche Vorliebe und Kosmetik.
FF -
Die Formatierung, die in meinen Code's drinne ist kommen alle von meinem Editor, das kümmert mich eigentlich nicht. Ich mache aber gerne viele Kommentare zu den einzelnen Funktionen und Anweisungen, um mir zu merken, was was bezweckt.
Mein Hauptpunkt ist, dass es gut, schnell und sicher funktioniert. -
Am wichtigsten ist denke ich
a) Unit Tests für den Code zuschreiben
b) den Code so zu schreiben, dass man ihn auch wirklich Testen kann - SOLID -
entweder ich schreibe viele verschieden Funktionen um alles einzeln zu testen und bessere Übersicht zu haben oder ich schreibe alles in einem ewig langen Programm wo nur ich durchsehe und sonst keiner.
-
Naja Code-Design ist schon wichtig, wenn du aber nur für dich selbst programmierst, spielt es gar keine Rolle wie es aussieht, so lange du es lesen kannst.
Ich rücke auch immer alles schön ein.
OOP für PHP ist zwar etwas witzlos (weil PHP halt einfach so eine schmudlige Sprache ist), aber ein guter Ansatz. Es lässt sich z.B. eine Datenbank Klasse entwickeln, welche in jedem Skript verwendet werden kann.
Doch wie nikic geschrieben hat, ist es wichtig den Code für Unit Tests zu optimieren.
Ob if oder switch kommt immer auf die Verwendung drauf an, bei einer grossen State-Change-List ist es sicher nützlich switch zu verwenden. Wobei man sich dann nicht überlegen kann, ob das wirklich der richtige Weg ist.
Wenn du wirklich OOP gehen möchtest, kannst dies evtl. je nach Situation mit State-Klassen und einem Array lösen.
mfg Lukas -
Vielen Dank,
all eure Meinungen finde ich sehr insteressant und hilfreich.
p.s.:
Mit arrays arbeite ich natürlich auch. -
Klar, das wichtigste ist natürlich, dass es funktioniert...
Insbesondere bei OpenSource-Kram muss man jedoch auch auf die "Kosmetik" achten:
- keine veralteten (deprecated) Befehle
- wenn UTF-8-Codierung, dann ohne BOM (insbesondere wegen header()-Funktionen)
- Statt eines Tabs lieber 4 Leerzeichen (wegen Kompatibilitätsproblemen)
- Keine Short-Open-Tags (da deaktivierbar)
- PHP-ClosedTags am Datei-Ende reiner PHP-Skripte beherzt weglassen (um Ausgabe von Zeichen zu verhindern)
- einheitliche Zeilenumbrüche (Unmengen an Möglichkeiten, je nach Editor: \r \n \r\n \0 \x \x0 ... )
- Ausgabe von Zeilenumbrüchen über echo() oder print() mittels chr(15).chr(10)
- echo() statt print() und einfache, statt doppelte Leerzeichen (um Skript-Laufzeit zu beschleunigen) -
Mal ganz abgesehen von der Codeformatierung (Einrückungen, highlighting, etc.) Ist es wichtig Funktionen, Variablen, Elemente und Objekte sinnvoll und strukturiert zu benennen.
Am besten suchst du dir Kürzel zusammen, um immer zu wissen, handelt es sich um eine Globale Variable? ein Objekt oder Element? Was ist die Funktion davon? Welches Format (zB. String, Integer, Array, Boolean, usw.) versteckt sich hinter einer Variable?
Das alles lässt sichmit einer sinnvollen Benamsung leicht übersichtlich und auch nach langer Zeit (sofern du dich immer an diese Regeln hältst) noch gut einlesbar.
MFG -
nikic schrieb:
anti-atomkraft schrieb:
- Ausgabe von Zeilenumbrüchen über echo() oder print() mittels chr(15).chr(10)
Huh, wer hat dir denn den Mist untergejubelt?! Kein Schwein weiß was chr(15) und chr(10) sind. Benutz lieber allgemeinverständliche "\r" und "\n".
1. Wenn man einfache, statt Doppelte Leerzeichen verwendet; funktioniert dergleichen nicht.
chr(15) ist nichts anderes als "\r" und chr(10) ist "\n".
2. Um unterschiedliche Codierungen und PHP-Einstellungen zu berücksichtigen, lieber dies verwenden (höhere Kompatibilität) -
Code sollte soweit wie möglich optimiert sein (=schnellere Ausführung). Gleichzeitig sollte er aber von jedem gelesen werden können. Einrückung sollte man unbedingt verwenden (bessere Lesbarkeit).
Was ich persönlich noch versuche (und auch anderen empfehle) ist den Code so zu schreiben dass man ihn wiederverwenden kann, falls man irgendwo anders etwas ähnliches wieder braucht. -
anti-atomkraft schrieb:
1. Wenn man einfache, statt Doppelte Leerzeichen verwendet; funktioniert dergleichen nicht.
chr(15) ist nichts anderes als "\r" und chr(10) ist "\n".
2. Um unterschiedliche Codierungen und PHP-Einstellungen zu berücksichtigen, lieber dies verwenden (höhere Kompatibilität)
Nur um sicher zu gehen, dass ich das richtig verstanden habe: du benutzt das komplett unlesbare chr(15) anstelle von "\n", weil du keine doppelten Anführungszeichen verwenden willst, weil du denkst, dass sie langsam sind? Wenn das der Fall sein sollte, dann muss ich dich leider enttäuschen ;) Einfache und doppelte Anführungszeichen haben keinen (messbaren) Performanceunterschied und chr(15) ist da im Gegensatz *deutlich* langsamer, da Funktionsaufrufe immer recht viel Overhead haben. -
nikic schrieb:
Nur um sicher zu gehen, dass ich das richtig verstanden habe: du benutzt das komplett unlesbare chr(15) anstelle von "\n", weil du keine doppelten Anführungszeichen verwenden willst, weil du denkst, dass sie langsam sind? Wenn das der Fall sein sollte, dann muss ich dich leider enttäuschen ;) Einfache und doppelte Anführungszeichen haben keinen (messbaren) Performanceunterschied und chr(15) ist da im Gegensatz *deutlich* langsamer, da Funktionsaufrufe immer recht viel Overhead haben.
Und ob sie schneller sind! Sogar erheblich! Innerhalb doppelter Anführungszeichen durchsucht das Programm den String nämlich nach Variablen, in einfachen nicht.
geht,echo "Hallo, $nutzer";
nicht.echo 'Hallo, $nutzer';
Natürlich bliebe die Möglichkeit, zu schreiben
echo 'blablabla'."\r\n".'blablabla';
Hier greift jedoch mein zweites Argument, warum es mittels chr() besser ist.
Beitrag zuletzt geändert: 11.12.2011 21:31:12 von anti-atomkraft -
Die Ausführung von
ist trotzdem schneller als irgendwelche Funktionsaufrufe. Bei deinem chr muss 2x eine Funktion aufgerufen werden => Overhead. Bei echo "bla"; hingegen wird nur echo aufgerufen und ein Ersetzen von Text ist effektiv implementiert. Wenn du einen Text ersetzt, wie würdest du das machen? Etwa jedes mögliche "\r" ... ersetzen? Viel warscheinlicher ist in einer 6-CPU-Befehle-Schleife nach dem Auftreten von $ und \ suchen und dann erst irgend etwas ersetzen.echo "ein Text\r\n";
-
hackyourlife schrieb:
Die Ausführung von
ist trotzdem schneller als irgendwelche Funktionsaufrufe.echo "ein Text\r\n";
Das streite ich überhaupt nicht ab...
Nur
ist schneller, als deine Methodeecho 'ein Text'."\r\n".'weiterer Text';
Und
sorgt für weniger Kompatibilitätsprobleme als die vorherige Version...echo 'ein Text'.chr(15).chr(10).'weiterer Text';
In dem angesprochenen Fall (OpenSource) geht Kompatibilität halt vor.
Beitrag zuletzt geändert: 12.12.2011 14:08:07 von anti-atomkraft -
und was ist an
kompatibler alsecho 'ein Text'.chr(15).chr(10).'weiterer Text';
Warum kannst du nicht einfachecho 'ein Text'."\r\n".'weiterer Text';
schreiben (was übrigens auch schneller ausgeführt wird als die beiden anderen Varianten)?echo "ein Text\r\nweiterer Text";
Was genau verstehst du unter Kompatibilität?
EDIT:anti-atomkraft schrieb:
ist schneller, als deine Methodeecho 'ein Text'."\r\n".'weiterer Text';
Stimmt leider nicht: ist auch langsamer als ein einfaches
Der Grund: deine Version muss 3 Strings miteinander verbinden UND ein "\r\n" auflösen, meine nicht. Bei meiner Variante wird die Ausführungsgeschwindigkeit deshalb geringfügig höher sein.echo "eins\r\nzwei";
Die Differenz geht aber gegen null und wird dir völlig egal sein solange du keinen Traffic wie auf einem Facebook-Server hast. Wenn du das hättest würdest du aber warscheinlich sowieso zu JSP umsteigen und dir keine solchen Fragen mehr stellen (weil das ganze in JSP hinfällig ist!)
Beitrag zuletzt geändert: 12.12.2011 18:08:57 von hackyourlife -
Um wieder zurück zum Topic zu kommen:
Früher war es mir egal, wie der Code aussieht.
Mittlerweile versuche ich schon recht streng das HTML vom PHP zu trennen und innerhalb vom PHP dann den Datenbankkram von der Logik.
Also ich mache mir ein Model, was sich darum kümmert, die DB anzupassen, und in der Logik sage ich einfach nur $object->eatFishAndDie(); -
rissrosi schrieb:
Mittlerweile versuche ich schon recht streng das HTML vom PHP zu trennen und innerhalb vom PHP dann den Datenbankkram von der Logik.
Solch eine Trennung ist immer gut, vor allem wenn man den Code wo anders mal wieder verwenden möchte und nicht 1. alles neu schreiben will oder 2. alles umschreiben will (bei der neuen Seite). -
Die wichtigsten Punkte, die hier auch schon genannt wurden,
sind natürlich Funktionalität, Effizienz und Wartbarkeit.
Ich bin der Meinung man sollte sehr ausführlich auskommentieren,
auch wenn man nur für sich selbst schreibt, was wiederrum bei der
Zusammenarbeit mit anderen selbstverständlich sein sollte.
@anti-atomkraft
Wenn du dir Gedanken über die Kompatibilität von Zeilenumbrüchen machst
gibt es dafür die PHP_EOL Konstante, das mit dem chr(15) und chr(10) ist Blödsinn.
Und mal ganz im allgemein bezweifle ich, dass es hier irgendjemanden gibt der solch große
Webanwendungen schreibt,
dass der minimale Geschwindigkeitsunterschied von Single und Double Quotes relevant ist.
Aber davon mal abgesehen finde ich es angebracht Single Quotes zu verwenden.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage