Blog

Debugging in SilverStripe

Die Suche nach den Fehlern in meinen Programmierergebnissen ist ein wesentlicher Teil meiner Entwicklungsarbeit. Was steht jetzt eigentlich in dieser Variablen? Kommt das Script überhaupt an eine bestimmte Stelle im Code? Die hauseigenen Mittel von PHP, wie etwa var_dump(), helfen in manchen Situationen nur nicht weiter. Bei der Arbeit am JavaScript-lastigen Backend von SilverStripe führt var_dump() unter Umständen dazu, dass überhaupt nichts mehr ausgegeben wird.

Tags:

... den ganzen Beitrag lesen


Analysis Paralysis oder die Qual der Wahl

Man könnte genau so gut auch "die Wahl der Qual" sagen. Es gibt wissenschaftliche Abhandlungen darüber, dass wir Menschen nicht gut mit zu viel Auswahl umgehen können. Zu viel Auswahl macht uns - und das ist bewiesen - unglücklich, weil wir immer das Gefühl haben, das Falsche ausgewählt zu haben. Wahre Foltermeister sind demzufolge China-Restaurants mit 3-stelligen Bestellnummern, dutzenden Permutationen der Zutaten Huhn, Ente, Rind, Schwein, Reis, Nudeln und den üblichen Gemüsebeilagen.

Aber warum müssen sich Programmierer das antun?

Aktuell müssen wir die Entscheidung für ein PHP-Framework treffen (die Entscheidung für Netbeans und gegen die Eclipse-IDE und derer Derivate haben wir zum Glück schon hinter uns) und da gibt es einige potentielle Kandidaten (in zufälliger Reihenfolge):

Tags:

... den ganzen Beitrag lesen


Die Rache der Laufvariablen

Es ist ja nicht nur in der PHP-Welt so. Aber meistens ist es in der PHP-Welt, in der man deswegen auf der Nase landet, weil es in anderen Welten entsprechende Kontrollmechanismen gibt. "With great freedom comes great responsibility".

Eigentlich weiss man es ja auch besser, aber hin und wieder verfällt man der Unsitte, die Laufvariablen von Zählschleifen $i und $j zu benennen. Der Ursprung geht wahrscheinlich z.T. auf das Streben nach speicherfreundlichen, kurzen Variablennamen und z.T. auf die ungarische Notation zurück. Auch in Fachbüchern stolpert man immer wieder über diese kryptischen Abkürzungen.

Gestern, bei über 30 Grad im Büro, war genau dieser Umstand der Grund für eine mehrere Stunden dauernde debugging-session, weil sich in einem Shopprojekt einfach nicht der gewünschte Erfolg einstellen wollte. Denn frei nach Murphy findet sich der Fehler immer an der Stelle, an welcher man als letztes gesucht hat.

Ursache für den ausbleibenden Erfolg war die Tatsache, dass die Controller-Datei, in welche die Änderungen korrekter Weise hingehören von einem ControllerProcessor inkludiert wird. Dieser ControllerProcessor sorgt dafür, dass alle registrierten Controller der Reihe nach abgearbeitet werden. Dabei wird ein mehrdimensionales Array iteriert und im Schleifeninneren der jeweilige Kontroller geladen.

Wer errät, welche Bezeichner die Laufvariab

Tags:

... den ganzen Beitrag lesen


Zend Framework: Konfigurationsdaten aus der application.ini lesen

Das Zend Framework ist hervorragend dokumentiert, es werden PHP-Coding Standards verwendet und alles ist vorbildlich mit Unit-Tests abgedeckt.

Dennoch gibt es aber manchmal Fälle, in denen man sich in der Dokumentation verliert und einfach nicht mehr weiter kommt.

Einer dieser alltäglichen Fälle ist das Auslesen von Konfigurationsdaten aus der application.ini
In der Zend Framework Dokumentation werden zwei Möglichkeiten beschrieben, wie man die eigene PHP-Applikation über PHP oder über XML konfigurieren kann.

Aber die offensichtliche Lösung über application.ini wird nicht behandelt.

Folgende Lösung funktioniert (zumindest mit der Version 1.9.0):

In der application.ini wird zunächst die gewünschte Konfiguration angelegt, in diesem Fall die Zugangsparameter zu einer MySQL-Datenbank:

  1. db1.host = "someHost"
  2. db1.dbname = "someDb"
  3. db1.username = "someUser"
  4. db1.password = "somePassword"


Im Controller, der die Konfigurationsdaten benötigt, wird die foldende Methode erstellt:

  1. public function preDispatch() {
  2.         $bootstrap = $this->getInvokeArg('bootstrap');
  3.         $config = $bootstrap->getOptions();
  4.        
  5.         $this->_db1_config = array(
  6.          'host' => $config['db1']['host']
  7.         ,'dbname' => $config['db1']['dbname']
  8.         ,'username' => $config['db1']['username']
  9.         ,'password' => $config['db1']['password']);
  10.  
  11.         parent::preDispatch();
  12. }


Aus dieser Methode geht hervor, dass wir ein (per Konvention) privates Attribut _db1config im Controller anlegen müssen mit Daten aus der application.ini über $bootstrap->getOptions() füttern.

Da diese Zugangsdaten zur Datenbank jetzt - natürlich rein zufällig - als Array vorliegen, können diese direkt weiterverwendet werden, z.B. so:

  1. Zend_Db::factory('Mysqli', $this->_db1_config);

Tags:

... den ganzen Beitrag lesen


PHP 5.3 veröffentlicht

Gestern wurde die neue und lang erwartete Version 5.3 von PHP veröffentlicht. Neben den normalen Bugfixes wurden auch einige Features implementiert, welche erst für PHP 6 geplant waren. Eine kurze Liste der wichtigsten Änderungen:

Closures & Lambda
GOTO
Late Static Binding
Namespaces
NOWDOC
Rundungsverhalten
Type-Hinting - self, parent, interfaces

Releasenotes PHP 5.3
PHP 5.3 Download

Auch wenn der produktive Einsatz dieses Release noch ein wenig auf sich warten lassen sollte, so sind wir von Pixeltricks schon jetzt in der Lage Ihre Projekte mit PHP 5.3 schnell und effektiv umzusetzen.

Tags:

... den ganzen Beitrag lesen


Scheinbar lückenhafte Ergebnisse mit array_unique

Wer wollte nicht schnell die ein oder andere Doublette per array_unique aus seinem Array entfernen und wunderte sich dann über fehlerhafte Ausgaben im Browser.

Beim entfernen von doppelten Einträgen aus dem Array löscht array_unique einfach den Index von selbigen und hinterlässt so eine sichtbare Lücke z.B. in der Ausgabe von Ergebnislisten.

Abhilfe schafft dann die Neuindexierung des Arrays z.B. über das foreach-Konstrukt wie im Beispiel:

Tags:

... den ganzen Beitrag lesen