php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.01.2007, 08:58   #1 (permalink)
Benutzer
 
Registriert seit: 10.01.2007
Beiträge: 34
Matze
Standard Der "richtige" Programmierstil

Eins vorweg, den Programmierstil gibt es nicht, dem bin ich mir bewusst.

Jedoch habe ich gestern Abend wahrscheinlich zum 1536. Mal komplett neu mit einem anderen Stil angefangen zu programmieren. So komme ich doch nicht weiter ... Wie habt ihr euern Stil gefunden? Wo seht ihr in eurem Stil für Vor- und Nachteile?

Wie läufts bei euch mit Objekten/Klassen? Benutzt ihr exzessiv für jede winzige Funktion eine Klasse? Was speichert ihr in einer Klasse? Eine einzelne News oder alle News in einem Array? Arbeitet ihr quasi funktionsorientiert mit Klassen?

Beispiel News einfügen: Speichert ihr nur das Query in eurer Methode? Oder die ganzen Kontrollen? Baut ihr gar die if-Abfrage, ob der Submit-Button schon gedrückt wurde, in eine Klasse mit ein?

4 Zeichen einrücken oder 2? ' oder "? Leerzeichen zwischen Vergleichen und Deklarationen oder nicht? Wo liegen die Vor- und wo die Nachteile?

Wie sichere ich mein Script am besten ab? Wie, wie, wie ...

Ich sehe meinen letzten Ausweg darin, hier mal nachzufragen, ansonsten komm ich noch total durcheinander und nebenbei auch keinen Schritt voran, da ich mich immer wieder rückwärts bewege, nur weil das gerade ganz cool aussieht!

Die ultimative Hilfe könnt ihr mir nicht geben, aber ihr könnt mir euern Programmierstil evtl. etwas vorstellen, also was für Klassen ihr benutzt usw.

Ich weiß, ihr könnt es mir nicht abnehmen, meinen Stil zu finden und wenn ich euren Stil direkt übernehme, ist es ja auch nicht wirklich meiner.

Also, schießt am besten einfach los, wäre super!
Matze ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.01.2007, 09:59   #2 (permalink)
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

Hallo Matze,

ein "guter" Stil bedeutet einfach, dass Dein Quellcode ein paar wichtige Eigenschaften besitzt (Shame on me, wenn ich welche vergesse ):

umfangreiches Errorhandling (respekt. Exceptionhandler), error_reporting(E_ALL) aktiviert, portabler Quellcode (betriebssystemunabhängig, kleine Ranges für MySQL und PHP Versionen, mit denen der Code kompatibel ist), geeignete Variablennamen (schreibe am Besten so, dass jemand anders auch Deinen Quellcode verstünde), sauberes Variablenhandling (int/ Stringvariablen werden auch als solche behandelt und nicht verwürfelt), Quelltext kommentieren, Objekte richtig verwenden (vererbung, richtiges Handling), trenne PHP und HTML bzw Datenbankhandling(z.B. http://de.wikipedia.org/wiki/MVC ), nimm geeignete Funktionen für Deine Belange und achte auf Performanz (z.B. reicht oft strpos() statt einem regulären Ausdruck), mache Dich mit diversen Frameworks (PHP, AJAX) und Templateklassen (z.B. Smarty) vertraut. Lerne, an den richtigen Stellen nach Lösungen zu recherchieren - in den meisten Fällen hilft ein Blick ins Manual von PHP /MySQL und in die User-comments (gute Tips!).

Alles andere kannst Du nur selbst lernen. Wenn Du Dich mit der Theorie auskennst und mit einem Projekt beschäftigt bist, wirst Du unweigerlich auf Probleme stoßen, die durch Deine Code-Infrastruktur bedingt sind. Da hilft nur analysieren und Lösung finden respektive das nächste mal anders zu handhaben!
Lade Dir doch mal einfach ein CMS herunter, das schon objektorientiert programmiert ist und schau Dir an, wie der Quelltext da aussieht. Wenn Du dann mal durchsteigst, bringt das einiges.

Hier noch ein kleiner Text dazu:
http://thc.org/root/phun/unmaintain.html
(nicht speziell für PHP)

Hab wahrscheinlich die Hälfte vergessen, aber hoffentlich hilft Dir das schon.

Gruß
pepe24 ist offline  
Alt 17.01.2007, 12:30   #3 (permalink)
Benutzer
 
Registriert seit: 10.01.2007
Beiträge: 34
Matze
Standard

Danke für deine Antwort! Werde mir die Links mal durchlesen!

Zitat:
Zitat von pepe24
Lade Dir doch mal einfach ein CMS herunter, das schon objektorientiert programmiert ist und schau Dir an, wie der Quelltext da aussieht. Wenn Du dann mal durchsteigst, bringt das einiges.
Kannst du mir da Namen nennen? Bisher habe ich noch kein CMS gefunden, was wirklich objektorientiert arbeitet und kostenlos ist.
Matze ist offline  
Alt 17.01.2007, 12:58   #4 (permalink)
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
ich unterscheide jetzt einfach mal zwischen formeller und inhaltlicher Struktur. Kommen wir zuerst zur fomellen:

- ein konsequent verwendeter Coding-Standard
http://pear.php.net/manual/en/standards.php
http://framework.zend.com/manual/en/...-standard.html

- Englische Bezeichnernamen für Variablen, Funktionen und Klassen wählen (oder zumindest konsequent eine Sprache favorisieren, kein Mischmasch)

- Pro Funktion oder Klasse, eine Datei. Hierbei wie erwähnt Vererbung mit einbauen.


Inhaltliche Aspekte wären:
- Doppelten Code vermeiden, diesen wenn möglich in einer Funktion oder Klasse zu abstrahieren.

- Top-Down statt Bottom-Up Programmierung. Ich programmiere also von oben nach unten (benötigte Klassen und ihre Schnittstellen herausarbeiten), anstatt ganz klein anzufangen (Formular-Feld xy überprüfen).
http://de.wikipedia.org/wiki/Top-Dow...ttom-Up-Design

Lies dir doch mal folgende Bücher durch, sehr sehr gute Bücher, leider auch nicht ganz billig:
Professionelle PHP 5-Programmierung
Du kannst dir mal das Inhaltsverzeichnis über Amazon anschauen.

Der pragmatische Programmierer
Bezieht sich aufs Programmieren allgemein, trotzdem viele wichtige Tipps. Gerade für Fragen "wie programmiere ich richtig".


Ich versuche jetzt nochmal deine direkten Fragen zu beantworten:
Zitat:
Zitat von Matze
Wie habt ihr euern Stil gefunden?
Mit den Jahren, meinen Coding-Stil bei PEAR.

Zitat:
Zitat von Matze
Wo seht ihr in eurem Stil für Vor- und Nachteile?
Aufgeräumter Code ist übersichtlicher. Ich finde Fehler schneller und habe das Gefühl, mein Code ist ordentlich (zB kann ich auch nicht Lernen, wenn mein Zimmer unaufgeräumt ist).

Zitat:
Zitat von Matze
Wie läufts bei euch mit Objekten/Klassen? Benutzt ihr exzessiv für jede winzige Funktion eine Klasse?
Nein, aber das lustige ist, oft ist es sinnvoll auch für kleine Aufgaben Klassen/Methoden zu verwenden. Du baust dadurch nebenher ein kleines Framework auf, das dir dauerhaft immense Arbeit erspart und so einzigartig wie man auf den ersten Blick glaubt, ist eine Funktion meistens nicht.

Zitat:
Zitat von Matze
Was speichert ihr in einer Klasse?
Niemals HTML, höchstens in einer display()- oder debug()-Methode.

Zitat:
Zitat von Matze
Eine einzelne News oder alle News in einem Array?
Eine News in der Klasse News, mehrere News in der Klasse NewsManager, welche wiederum von einer Manager-Klasse erbt, die als abstrakte Klasse oder Interface agieren könnte (Schnittstellenvorgabe, zB für load() oder save()).

Zitat:
Zitat von Matze
Arbeitet ihr quasi funktionsorientiert mit Klassen?
Was meinst du?

Zitat:
Zitat von Matze
Beispiel News einfügen: Speichert ihr nur das Query in eurer Methode? Oder die ganzen Kontrollen? Baut ihr gar die if-Abfrage, ob der Submit-Button schon gedrückt wurde, in eine Klasse mit ein?
Was von der Klasse sinnvoll erledigt werden kann, soll sie auch erledigen.
Ich übergebe dem NewsManager beim Bearbeiten einer neuen News also die ID der News und den Daten-Array (zB $_POST).
PHP-Code:
<?php
$oNewsManager 
= new NewsManager($oConnection);
if (
$oNewsManager->update($_GET['id'], $_POST)) {
  
header(sprintf('Location: news/details.php?id=%u'$_GET['id']));
  exit;
} else {
  
$oMessages singleton('MessageQueue');
  
$oMessages->add('Die News konnten nicht aktualisiert werden.');
}
// ..
?>
Zitat:
Zitat von Matze
4 Zeichen einrücken oder 2?
4 Leerzeichen. Warum kein Tab? Weil der Tab auf vielen System in anderer Breite dargestellt wird, man aber trotzdem oft manuell zeichengenau einrücken möchte was mit dem Tab schonmal nicht geht. Falls man dann Tab + Leerzeichen kombiniert und eine Tab-Breite auf einem anderen Editor länger/kürzer dargestellt wird, war das Einrücken für den Arsch.

Zitat:
Zitat von Matze
' oder "?
Wahrscheinlich egal, ich benutze wann immer möglich ' - es ist eben ganz minimal schneller. " bietet ja nur den Vorteil, PHP-Variablen in einen String zu braten, was mir nicht gefällt, da unübersichtlich. Zur String-Verknüpfung verwende ich lieber sprintf().

Zitat:
Zitat von Matze
Leerzeichen zwischen Vergleichen und Deklarationen oder nicht?
Laut der beiden verbreitetsten Coding-Standards: Hinter Kontrollstrukturen (if, switch, ..) ein Leerzeichen vor der Klammer, hinter Funktions- oder Methodennamen nicht (siehe auch mein Coding-Beispiel oben).

Zitat:
Zitat von Matze
Wo liegen die Vor- und wo die Nachteile?
Du wirst dir selbst über den Unterschied von Kontrollstruktur und Funktion klar, aber auch hier liegt der Hund im konsequenten Durchziehen einer Linie begraben.

Zitat:
Zitat von Matze
Wie sichere ich mein Script am besten ab? Wie, wie, wie ...
Gegen Hacker? Kann ich pauschal nicht beantworten. Benutze für SQL-Statements immer mysql_real_escape_string() und sprintf(). Stehe damit denke ich sehr sicher da.
Zergling-new ist offline  
Alt 17.01.2007, 13:30   #5 (permalink)
Benutzer
 
Registriert seit: 10.01.2007
Beiträge: 34
Matze
Standard

Hui! Soviel Text!


Zitat:
Lies dir doch mal folgende Bücher durch, sehr sehr gute Bücher, leider auch nicht ganz billig:
Professionelle PHP 5-Programmierung
Du kannst dir mal das Inhaltsverzeichnis über Amazon anschauen.
Ich werde mal gucken, ob ich das irgendwo (Ebay, etc.) billiger finde. Klingt schonmal ganz vielversprechend!


Zitat:
Eine News in der Klasse News, mehrere News in der Klasse NewsManager, welche wiederum von einer Manager-Klasse erbt, die als abstrakte Klasse oder Interface agieren könnte (Schnittstellenvorgabe, zB für load() oder save()).
Wie schaut die Manager-Klasse denn aus? Schnittstellenvergabe? Bis zur Klasse "NewsManager" kann ich dir ja folgen, danach wirds kompliziert.


Zitat:
Was meinst du?
Hmm, funktionsorientiert ist für mich, wenn man z.B. einen kompletten statischen Programmablauf (News einfügen, Datei löschen) in einer Funktion ablagert. Das ganze eingebaut in eine Klasse waren meine Programmieranfänge mit OOP. Ich hätte die komplette Funktion auch außerhalb einer Klasse schreiben können.


Zitat:
Gegen Hacker? Kann ich pauschal nicht beantworten. Benutze für SQL-Statements immer mysql_real_escape_string() und sprintf(). Stehe damit denke ich sehr sicher da.
Die Funktion mysql_real_escape_string() benutze ich auch immer dann, wenn von einem User übermittelten Daten in die Datenbank eingetragen werden sollen. Mit sprinft() habe ich mich bisher noch gar nicht auseinandergesetzt, ich werde mir das mal angucken ...


Was mir an deinen Scripts oft auffällt, ist, dass du beim Variablenname immer zu Beginn einen kleinen Buchstaben setzt, wofür steht der?
Matze ist offline  
Alt 17.01.2007, 13:37   #6 (permalink)
Erfahrener Benutzer
 
Registriert seit: 27.10.2004
Beiträge: 1.093
Chr!s
Standard

Zitat:
Was mir an deinen Scripts oft auffällt, ist, dass du beim Variablenname immer zu Beginn einen kleinen Buchstaben setzt, wofür steht der?
Der steht für den jeweiligen Variablentyp.
PHP-Code:
<?php
$oObject 
= new StdClass();
$iInteger 2;
$sString 'Ich bin ein String';
$rResource mysql_connect(..);
$bBoolean true;
$fFloat 1.234;

// usw ..
?>
Ich deklarier meine Variablen auch immer mit dem Buchstaben davor, das dient meiner Übersicht.
__________________
www.ChrisDiary.De
Chr!s ist offline  
Alt 17.01.2007, 13:53   #7 (permalink)
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Genau, fehlt noch $mVar für mixed.

Zitat:
Zitat von Matze
Wie schaut die Manager-Klasse denn aus? Schnittstellenvergabe? Bis zur Klasse "NewsManager" kann ich dir ja folgen, danach wirds kompliziert.
Meine Manager-Klasse ist für die Datenbank-Kommunikation zuständig. Es kennt also die Tabellen-Struktur.
Ich kann die Klasse auffordern, mir die letzten 30 News als Array von News-Objekten zurückzuliefern.
PHP-Code:
<?php
// zB
$oNewsManager Manager::factory('News'$oConnection);
foreach (
$oNewsManager->getLatest(30) as $oNews) {
  echo 
$oNews->getTitle(), "
\n"
;
}
?>
Sie liefert mir also alles, was ich sonst mit SELECT, UPDATE, DELETE oder INSERT händisch programmieren müsste. Dazu auch noch eine feste Schnittstelle, dass ich also das gleiche auch mit Downloads machen könnte:

PHP-Code:
<?php
$oDownloadManager 
Manager::factory('Downloads'$oConnection);
foreach (
$oDownloadManager->getLatest(30) as $oDownload) {
  echo 
$oDownload->getFilename(), "
\n"
;
}
?>
Zergling-new ist offline  
Alt 17.01.2007, 14:40   #8 (permalink)
Benutzer
 
Registriert seit: 10.01.2007
Beiträge: 34
Matze
Standard

Der Parameter "News" bzw. "Downloads" spricht also die MySQL-Tabelle an? Danach werden die Inhalte in einem Array gespeichert und "getLatest()" gibt 30 Elemente dieses Arrays zurück, hab ich da richtig gedacht?
Matze ist offline  
Alt 17.01.2007, 20:01   #9 (permalink)
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.624
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Matze
Danke für deine Antwort! Werde mir die Links mal durchlesen!

Zitat:
Zitat von pepe24
Lade Dir doch mal einfach ein CMS herunter, das schon objektorientiert programmiert ist und schau Dir an, wie der Quelltext da aussieht. Wenn Du dann mal durchsteigst, bringt das einiges.
Kannst du mir da Namen nennen? Bisher habe ich noch kein CMS gefunden, was wirklich objektorientiert arbeitet und kostenlos ist.
würd mich auch interessiern!
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 17.01.2007, 21:07   #10 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 21.316
PHP-Kenntnisse:
Fortgeschritten
nikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblick
Standard

Die von Zergling verlinkten Pear:Coding Standards sind ziemlich ausführlich und gut. Obgleich ich da einiges anders mache (
z.b.
- ist mir eine Beschränkung auf 80 Zeichen Breite wichtiger als 4 Zeichen Einrückung
- finde ich es sinnvoll, den Shell Kommentar als dritte Möglichkeit zur Kommentierung zu nutzen: Kommentierung vs. Code auskommentieren
- finde ich die docblock Kommentar-Syntax umständlich
usw.
) ist es sinnvoll, für sich selbst seinen eigenen Coding-Standard zu 'setzen', indem man einfach mal eine oder zwei längere Klassen konsequent damit umsetzt - und dabei vielleicht Nachteile erkennt und 'rausdefiniert'.

professionelle softwareentwicklung mit php5
http://php-coding-standard.de

Wenn dann noch das Arbeitswerkzeug und die -umgebung stimmt, kommt schon fast automatisch ein hochwertiges Produkt heraus.
nikosch ist gerade online  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Programmierstil Fatal Error Off-Topic Diskussionen 19 04.10.2006 21:37
Frage zu Programmierstil inu PHP Tipps 2006 8 26.05.2006 08:11
Frage zu eurem Programmierstil PHP Tipps 2005 10 27.03.2005 05:25
imap_headerinfo: "richtige" Empfängeradresse finde PHP-Fortgeschrittene 2 19.01.2005 13:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sprintf schneller oder stringverknüpfung, top-down und bottom-up programmierstil

Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.