1. Archiv für Kategorie ‘Programmierstil’

  2. HTML5 in der Praxis – Erfahrungen einer Erstimplementation

    Stefan · 27.10.09, 00:31 Uhr · HTML5, Programmierstil · 1 Kommentar

    Das HTML5 ein aktuelles Thema ist, ist nicht mehr zu übersehen. Neben Youtube (komplette Demo Seite für HTML5), GoogleMail und Apple (Promovideos mit Video-Tag gelöst) gibt es zahlreiche andere Demo Seiten im Netz, die sich mit HTML5 beschäftigen.

    Eines Vorweg: HTML5 ist leider noch lange nicht vollständig in den Browsern implementiert, da HTML5 derzeit noch den Status „draft“ besitzt, sprich noch in Bearbeitung ist. Nichts desto trotz kann man verschiedene Features bereits heute nutzen. Daher hatte ich vor kurzem beschlossen, eines unserer neuesten Blogs auf HTML5 zu programmieren.

    » Kompletten Beitrag lesen

  3. Kurioses: HTML und Listen

    Stefan · 16.06.09, 17:45 Uhr · Allgemeines, Programmierstil · Keine Kommentare

    Ich habe heute die Aufgabe gehabt, mir Volltext-XML Dateien inkl. Formatierung aus Redaktionssystemen anzuschauen. Das ist auch eine interessante Art, Aufzählungen/Listen zu schreiben:

    <p><strong> • </strong> ...</p>
    <p><strong>• </strong> ...</p>
    <p><strong>•</strong> ...</p>
    <p><strong> • </strong> ...</p>

    Mich erstaunt ja, dass es immerhin geschafft wurde, den Punkt als Sonderzeichen einzufügen.

  4. PHP5 Tipp: Serialisierte Objekte in Exceptions

    Stefan · 28.10.08, 18:13 Uhr · Allgemeines, PHP, Programmierstil · Keine Kommentare

    Wenn man in PHP5 ordentlich programmiert, dann tut man das in der Regel Objektorientiert und wirft bei Fehlern auch aussagekräftige Exceptions, um spätere Fehlerbehandlungen einfacher zu gestalten.

    In einem meiner derzeitigen Projekte übergebe ich als Hilfsmittel hauptsächlich zum Debuggen in der Exception Message auch das serialisierte Objekt, das den Fehler verursacht hat. Solange man nur public Properties im Objekt hat, ist das auch alles kein Problem. Gestutzt hatte ich als die Exception geworfen wurde und mein serialisiertes Objekt einfach nur zur Hälfte in der Message stand. Schuld war der Geltungsbereich von Properties. Eine als private oder protected deklarierte Eigenschaft wird serialisiert mit folgenden Flags gekennzeichnet: ' . "\0" . ' oder ' . "\0" . '*' . "\0" . '. Und genau das scheinen die Exceptions nicht zu mögen.

    Folgendes Testobjekt

    class Test {
        protected $_property = array(
            'id' => 12,
            'content' => 'test'
        );
    }

    erzeugt folgende Ausgabe in der Serialisierung:

    'O:4:"Test":1:{s:12:"' . "\0" . '*' . "\0" . '_property";a:2:{s:2:"id";i:12;s:7:"content";s:4:"test";}}'

    Das Ganze jetzt in einer Exception gethrowt kam bei mir so an:

    O:4:"Test":1:{s:12:"

    Lösung des Ganzen: Beim Throwen einer Exception statt einem serialize($object) noch zusätzlich ein var_export drumherum setzen, dann klappt das auch mit der Exception:

    throw new Exception(var_export(serialize($object), true));
  5. Programmierrichtlinien / Coding Style Guides

    Stefan · 15.09.08, 16:46 Uhr · Programmierstil · 1 Kommentar

    Heute ist der Zeitpunkt gekommen, unsere Coding Styleguides für unsere Projekte neu anzupassen und neu zu definieren. Im Laufe der Zeit und mit der Anzahl der Projekte kamen immer neue Anforderungen auf uns zu, so dass ich heute die Styles mal wieder aktualisiert und vereinheitlicht habe.
    Wen es interessiert, dem habe ich den Styleguide hier reingepostet:
    » Kompletten Beitrag lesen

  6. PHP-Tipp: Dateipfad zu Array

    Stefan · 11.08.08, 20:20 Uhr · PHP, Programmierstil, Tutorials · Keine Kommentare

    In einem Projekt benötigte ich aus diversen Gründen einen mehrdimensionalen Array aus einem Dateipfad. Aufgabenstellung ist recht klar und hört sich eigentlich einfach an, ist es aber leider nicht wirklich. Problem: der Pfad kann je nach Datei eine unterschiedliche Tiefe haben.

    Mein Ursprungsarray schaute wie folgt aus:

    $elements = array();
    $elements["dir1/dir2/dateiname.jpg"] = array("name" => "dateiname.jpg", "filesize" => "12345");
    $elements["dir1/dir2/dateiname2.jpg"] = array("name" => "dateiname2.jpg", "filesize" => "21534");
    $elements["dir2/dir1/dateiname1.jpg"] = array("name" => "dateiname1.jpg", "filesize" => "12345");
    $elements["dir2/dir1/dir1/dateiname1.jpg"] = array("name" => "dateiname1.jpg", "filesize" => "12345");
    $elements["dir2/dir2/dateiname1.jpg"] = array("name" => "dateiname1.jpg", "filesize" => "12345");

    Um daraus nun einen mehrdimensionalen Array zu erstellen gibt es verschiedene Möglichkeiten:

    1. Angenommen, alle Dateien liegen in gleichen Verzeichnistiefen, so kann man das über verschachtelte for/foreach-Schleifen fest reincodieren – beim obigen Beispiel funktioniert das leider nicht.
    2. Wir bauen uns eine rekursive Funktion die man jedes Mal mit dem erzeugten Ergebnis aufruft – das ist leider relativ langsam durch den function call
    3. Wir verwenden Schleifen mit referenzen auf den Urspungsarray

    Und genau den dritten Punkt habe ich folgendermaßen umgesetzt:
    » Kompletten Beitrag lesen

  7. Endlosschleifen in Zählschleifen verhindern

    Stefan · 09.08.08, 10:32 Uhr · Programmierstil · 2 Kommentare

    Gestern war kein guter Tag: Wir haben ein CMS einer unserer Websites aktualisiert und anfangs ging alles gut, allerdings ca. eine Stunde später ging gar nichts mehr – großes Rätselraten, da lokal alles funktionierte. Nach dem Debuggen der Anwendung haben wir den Übeltäter gefunden: In einem Fremdscript, das schon lange vor dem Update eingesetzt wurde, versteckte sich eine Endlosschleife die nur unter bestimmten Bedingungen eintritt. Folgendes ist passiert:

    Eine Schleife soll aus einer Liste mit Einträgen die letzten drei Einträge ausgeben, die nicht einer bestimmten Kategorie zugeordnet sind. Gelöst wurde das ursprünglich so:

    for ( $i = 0; $i < 3; $i++) {
       if ($entry[$i]["category"] == "xyz") {
          $i––;
          continue;
       }
       // anderer code hier
    }

    Ganz böse Idee! Warum? Sobald ein Eintrag die entsprechende Kategorie aufweist, die ausgelassen werden soll, wird der Schleifenzähler wieder zurückgesetzt. Da der Eintrag allerdings nicht manipuliert wurde und somit immer wieder auf den dafür verantwortlichen Eintrag trifft, der den Schleifenzähler wieder zurücksetzt, entsteht die Endlosschleife.

    Eine kleine Änderung der Schleife löste das Problem: 

    $maxcount = 3;
    $counter = 0;
    $totalEntries = count($entry);
    
    for ($i = 0; $i < $totalEntries; $i++) {
       if ($entry[$i]["category"] == "xyz") {
          continue;
       }
    
       // mach irgendwas
    
       $counter++;
       if ( $counter == $maxcount) {
          break;
       } 
    }
    

     
    Ganz wichtig: Schleifenbedingungen in einer Schleife dynamisch zu ändern sollte man nur tun, wenn man weiß, was es für Auswirkungen hat und ist in den meisten Fällen eine blöde Idee! Kommt man trotzdem nicht darum Schleifenbedingungen zu ändern (z.B. in einer While-Schleife die einen bestimmten Zustand erwartet) sollte immer eine Fallback-Lösung implementiert werden, falls Bedingungen nicht eintreffen (z.B. Schleifendurchgänge zählen und ab einem bestimmten Wert aus der Schleife herausspringen)

Gehe zur polyCODER Startseite