If you write lots of Console Commands in your Symfony application you sure want to know more about their memory and time consumption. To collect the necessary data you can make use of the Stopwatch Component: Weiterlesen
David Fuhr
UML-Diagramme aus Text mit PlantUML
Jeder Entwickler weiß, dass Diagramme oft helfen, über Inhalte zu sprechen. Aber Lust sich in eines der grafischen Tools einzuarbeiten, hat man dann meist doch nicht. Jedes verwendet einen anderen Standard und andere Konventionen, um im Wiki darüber zu reden muss man das Diagramm mühsam als Bild exportieren und eigentlich schreibt man ja am liebsten Code und klickt eher ungern. Weiterlesen
Erfolgreiches Git Branching-Modell
Dieser Beitrag ist eine Übersetzung des Artikels „A successful Git branching model“ von Vincent Driessen. Alle Bezüge auf „ich“, „wir“ usw. gelten daher aus seiner Perspektive.
In diesem Beitrag möchte ich das Entwicklungsmodell vorstellen, das ich vor ungefähr einem Jahr für alle meine Projekte (sowohl berufliche als auch private) eingeführt habe und das sich als sehr erfolgreich erwiesen hat. Ich wollte schon seit einiger Zeit darüber berichten, habe bisher jedoch nie wirklich die Zeit gefunden, das auch gründlich zu tun. Ich werde dabei die Projektdetails auslassen und stattdessen nur über die Branching-Strategie und das Release-Management schreiben.
Hier wird der Schwerpunkt auf Git als Tool zur Versionierung unseres gesamten Quellcodes gelegt.
Mime-Type-Problem mit PHP Autoload
Als ich mir heute mit PHP Autoload (phpab) meine Autoload-Datei neu generieren ließ, war ich bass erstaunt. Statt der üblichen 700 Klassen waren plötzlich nur noch 15 Dateien enthalten. Weiterlesen
ISO-8601-Stolperfalle bei Zend_Date
Jeder der mit Datumswerten gearbeitet hat, weiß (oder sollte zumindest) um die kleinen und großen Untiefen wie Zeitzonen, Zeitumstellung und Schaltjahre die es dabei zu umschiffen gilt. Neben der seit PHP 5.2 verfügbaren DateTime-Klasse gibt es im Zend Framework die ältere Zend_Date-Komponente. Mit beiden lässt sich die Handhabung von Datumswerten in einer Applikation vereinfachen und vereinheitlichen: Weiterlesen
PHP 5.4: Die wichtigsten Änderungen
Vor einigen Tagen war es soweit: PHP 5.4 wurde veröffentlicht. Die Anzahl der Änderungen sind, im Vergleich mit PHP 5.3, überschaubar, aber dennoch sollte man sie kennen. Die wichtigsten Änderungen kurz zusammengefasst:
Einige Code-Beispiele zu den Änderungen sind im zugehörigen Git-Repository: https://bitbucket.org/flagbit/php54.
Die Informationen zu Traits und dem Diamond-Problem sind im seperaten PDF.
Vorsicht bei der Verwendung von isset() mit Arrays
Manchmal sucht man Fehler, die man wieder und wieder überliest, weil man die falschen Annahmen getroffen hat und der Code oberflächlich richtig aussieht. Erfahrungsgemäß gibt es dann ein paar „übliche Verdächtige“, die man sich genauer anschaut. Zuweisungen im if-Statement, Vergleiche ohne Typprüfung, empty()
und isset()
sind dabei immer heiße Kandidaten.
Wenn man die Handbuch-Seite zu isset()
durchliest, klingt es, als wäre es problemlos möglich auch die Existenz von Array-Keys zu prüfen. Sogar ein schönes Beispiel gibt es dazu:
Doch ganz so einfach ist es leider nicht. Weiterlesen
Startschwierigkeiten PHP-CLI auf Windows mit cURL
Schon seit längerem nervt mich, dass das PHP-CLI auf meinem Windows-Rechner etwa drei Sekunden braucht, bevor es überhaupt anfängt irgendetwas zu tun: Weiterlesen
MySQL-Tabellen mit mk-archiver archivieren
Wenn man temporäre Logdaten in eine Datenbank schreibt, muss man sich früher oder später damit beschäftigen, wie man die auch wieder effizient herausbekommt. Im Normalfall will man die Daten auch nicht einfach löschen, sondern verschieben um später wieder darauf zugreifen zu können. Weiterlesen
Zend-TwoLevels-Cache speichert Einträge unbegrenzt
Der Zend-TwoLevels-Cache ist an sich eine feine Sache, da er, wie bereits beschrieben, das Schönste aus beiden Cache-Welten vereint. Diese Freude wird jedoch leider immer wieder durch manche Macken des TwoLevels-Caches getrübt.
Die Cache-Priorität wird im TwoLevels-Cache durch eine verkürzte Lebenszeit für niedrig priorisierte Cache-Einträge realisiert: Weiterlesen