Ankündigung

Einklappen
Keine Ankündigung bisher.

Der "richtige" Programmierstil

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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!

  • #2
    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ß

    Kommentar


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

      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.

      Kommentar


      • #4
        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 von Matze
        Wie habt ihr euern Stil gefunden?
        Mit den Jahren, meinen Coding-Stil bei PEAR.

        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 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 von Matze
        Was speichert ihr in einer Klasse?
        Niemals HTML, höchstens in einer display()- oder debug()-Methode.

        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 von Matze
        Arbeitet ihr quasi funktionsorientiert mit Klassen?
        Was meinst du?

        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 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 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 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 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 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.

        Kommentar


        • #5
          Hui! Soviel Text!


          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!


          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.


          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.


          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?

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              Genau, fehlt noch $mVar für mixed.

              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"
              ;
              }
              ?>

              Kommentar


              • #8
                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?

                Kommentar


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

                  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!
                  [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                  — The best things in life aren't things[/FONT]

                  Kommentar


                  • #10
                    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.
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar


                    • #11
                      Achja, was mich auch noch mal brennend interessieren würde:

                      Wie bereitet ihr euch auf ein Projekt vor? Was überlegt ihr euch vorher? Wieviel Notizen macht ihr und wieviel Zeit gebt ihr euch? Mit welchen Dateien fangt ihr an zu programmieren? Sind bei Programmierstart schon alle Tabellen in phpMyAdmin zu finden usw.?

                      Kommentar


                      • #12
                        Das frage ich mich auch gerade. Oh mann. Da gibts zwei Aspekte: eigene Vorstellung und die Ansichten des Auftraggebers.

                        Klärung des Umfangs / inhaltliche Konzeption !!!
                        Klärung der Zuständigkeiten (Lieferung von Inhalten etc.)
                        inhaltliche Strukturierung
                        Datenbankanforderungen
                        DB Strukturentwurf
                        Layoutvorschlag für den Arbeitgeber
                        Definition Filesystem-Struktur
                        Application Class (Include-, DB-, Session-, Template-Management, ) + Controller
                        und so weiter...
                        [COLOR="#F5F5FF"]--[/COLOR]
                        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                        [COLOR="#F5F5FF"]
                        --[/COLOR]

                        Kommentar


                        • #13
                          Wenn ich privat was mache dann läufts meistens eh so ab dass ich grade dass mache was mir am meisten Spass macht. Entweder bissl mit CSS rumspielen oder nen paar neue Ajax Funktionen ausprobieren oder halt mit PHP mal etwas spezielleres zu erstellen etc. und dann jenachdem wie ichs brauche kommen dazu eben die Tabellen oder so. Aber jetzt direkt shcon alles durchplanen tu ich selten.

                          Sind allerdings auch keine großen Projekte wo man alles durchgeplant haben muss. Es sind nur kleinere Projekte oder Spielereien wo es nicht viel zu bedenken gibt.

                          Kommentar


                          • #14
                            Zitat von nikosch77
                            Wenn dann noch das Arbeitswerkzeug und die -umgebung stimmt, kommt schon fast automatisch ein hochwertiges Produkt heraus.
                            na na

                            Kommentar


                            • #15
                              Ich plane eigentlich grundsätzlich mal vorher wie soll das ganze aussehen und welche Funktionen muss es haben.
                              Als ich vor 1,5 Jahre angefangen habe PHP zu lernen, habe ich ein Browsergame angefangen. Damals jedoch ohne jede Planung Kannst dir ja vorstellen wie das ausgegangen ist
                              Seither geht eigentlich nichts ohne Planung, außer es ist so ein billiges Gästebuch oder so

                              Kommentar

                              Lädt...
                              X