<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHP hates me - Der PHP Blog &#187; What the f***!</title>
	<atom:link href="http://www.phphatesme.com/archives/category/wtf/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phphatesme.com</link>
	<description>PhpHatesMe, but that&#039;s ok!</description>
	<lastBuildDate>Tue, 07 Feb 2012 06:00:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>__invoke &#8230; ein Geniestreich?!</title>
		<link>http://www.phphatesme.com/blog/wtf/__invoke-ein-geniestreich/</link>
		<comments>http://www.phphatesme.com/blog/wtf/__invoke-ein-geniestreich/#comments</comments>
		<pubDate>Fri, 14 May 2010 05:00:30 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[What the f***!]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=6068</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Magische Methoden gehören zu PHP. Viele schwören auf die Verwendung von magischen Gettern und Settern, viele lieben __call. Warum auch nicht! In vielen Fällen kann man seinen Source Code damit bestimmt für den Programmierer einfacher machen. Was die Person, die den Code wartet dazu meint fragen wir besser nicht. Egal. Es gibt ja schließlich auch andere magische Methoden und auf eine wollen wir heute eingehen.</p>
<p><span id="more-6068"></span>Die Methode __invoke, die ich an jeder Klasse anbringen kann, hat laut php.net folgende Nutzungsmöglichkeit:</p>
<blockquote><p>Die <em>__invole</em>-Methode wird aufgerufen,     wenn ein Skript versucht, ein Objekt als Funktion aufzurufen.</p></blockquote>
<p>So ab hier stehe ich jetzt auf dem Schlauch, wahrscheinlich gibt es wirklich gute Anwendungsfälle für __invoke. Ich habe leider nur gar, aber so wirklich keine Ahnung, wann ich das mal verwunden könnte. Ich habe auch noch nicht wirklich ernsthaft jemanden dieses Konstrukt im Quellcode so was verwenden sehen. Ok, liegt vielleicht auch dran, dass es erst ab PHP 5.3 unterstützt wird. Ich finde aber auch keinen guten Artikel im Netz dazu.</p>
<p>So jetzt genug von mir. Das ist eine wirklich ernst gemeinte Frage: <em><strong>Wofür verwendet ihr __invoke?</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/wtf/__invoke-ein-geniestreich/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Process und Co.</title>
		<link>http://www.phphatesme.com/blog/wtf/process-und-co/</link>
		<comments>http://www.phphatesme.com/blog/wtf/process-und-co/#comments</comments>
		<pubDate>Tue, 04 May 2010 05:00:46 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Tools & Helferlein]]></category>
		<category><![CDATA[What the f***!]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=6018</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Gestern hatte ich ja bereits kurz angesprochen, dass es aus Frankreich was neues gibt. Die Komponenten von Fabien Potencier haben gestern Abend also den Weg auf meinen Computer gefunden und wollten natürlich gleich ausprobiert werden. Tja dumm gelaufen, leider habe ich die Process-Klassen nicht zum Laufen bekommen.<span id="more-6018"></span></p>
<p>Im ersten Schritt hat er meine PHP.exe nicht gefunden. Ja richtig ich arbeite mit Windows. Schade eigentlich, naja da habe ich &#8216;nen Weg drumrum gefunden. Ich habe den Pfad einfach hard reinkodiert, kann man ja mal machen, wenn man was testen will. Soweit hat es dann auch funktioniert.</p>
<p>Dann lief auch alles durch. Nur leider ohne Effekt. Mein Code, der eigentlich klappen sollte, sah so aus:</p>
<pre><code>&lt;?php

include_once 'Process.php';
include_once 'PhpProcess.php';

use Symfony\Components\Process\PhpProcess;

$process = new PhpProcess('C:\Users\phm\websites\phphatesme\test\script.php');
$process-&gt;run();

echo $process-&gt;getOutput();
</code></pre>
<p>Leider bekomme ich als Output nur den Namen des Skripts, dass ich angegeben habe. Tja jetzt stehe ich hier und habe keinen richtigen Artikel. Ich kann aber ein wenig darüber erzählen, was ich eigentlich machen wollte. Im Prinzip ganz einfach. Das Skrtipt skript.php sollte nicht mehr machen, als &#8220;hallo welt&#8221; ausgeben. Und damit wollte auch mein aufrufendes Skript einfach nur &#8220;hallo welt&#8221; ausgeben.</p>
<p>Als nächstes hätte ich dann probiert, ob die getOutput Methode nur den endgültigen output des Prozess ausgibt oder auch schon was von der Methode zurückgegeben wird wenn das Skript zwischendurch mal mit flush seine Ausgabe schon mal auf die Kommandozeile pummt. Wäre auf jeden Fall ein cooles Feature, mit dem man bestimmt einiges machen könnte. Vielleicht auch irgendwas streamartiges. Viel Platz für Spielereien. Naja leider ist es dann gar nicht so weit gekommen und eine Doku gibt es auch noch nicht. Wir müssen also unser kleines Prozess-Abenteuer ein wenig verschieben. Falls einer von euch schon weiter gekommen ist, dann hoffe ich mal, dass ihr hier ein wenig Licht ins Dunkel bringt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/wtf/process-und-co/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>RSS-Feeds erweitern im Zend Framework</title>
		<link>http://www.phphatesme.com/blog/wtf/rss-feeds-erweitern-im-zend-framework/</link>
		<comments>http://www.phphatesme.com/blog/wtf/rss-feeds-erweitern-im-zend-framework/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 05:00:12 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Tools & Helferlein]]></category>
		<category><![CDATA[What the f***!]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=5931</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Endlich ist es wieder soweit. Wir haben einen wunderbaren &#8220;What the Fuck?!&#8221; gefunden. Dieses mal im Zend Framework. Wir waren vor kurzem daran zu zeigen, wie schön einfach es sein kann einen RSS-Feed zu erstellen. Tja war wohl nichts. Wirklich kompliziert war es nicht, aber mir sind ein paar wirklich &#8220;fiese&#8221; Stellen untergekommen, die ich heute mal ansprechen möchte.</p>
<p><span id="more-5931"></span>Prinzipiell kann man über Extensions einen RSS-Feed erweitern. Was ja eigentlich schön ist. Wenn ich also einen eigenen Namespace für phm haben will, dann schreibe ich mir eine phm-Extension. Diese registriere ich dann beim System. Dummerweise registriere ich die aber nicht bei einer Instanz eines Feed-Writers, sondern wirklich global im System. Jeder RSS-Feed, den ich danach erstelle wird diese Erweiterung auch beinhalten. Zumindest bis ich global den Reset-Knopf drücke. Finde ich schrecklich, weil man keine Ahnung hat,w elche Extensions jetzt wirklich schon registriert sind. Also werde ich natürlich am Anfang ein Reset drücken &#8230; und das jedes mal.</p>
<p><code>Zend_Feed_Writer::registerExtension( 'PhmRss' );</code></p>
<p>So, das war der erste Punkt, den ich anders machen würde. Merken wir uns: Global ist böse. Machen wir weiter., zwei Punkte habe ich nämlich noch. Der <code>Zend_Writer</code> hat beim initialisieren schon einige Core-Extensions dabei, die mit dem Reset autormatisch hinzugefügt werden. Ist ja nicht schlimm. Kann ja sein, dass es Extensions gibt, die &#8220;lebenswichtig&#8221; sind. Aber warum zum Teufel wird IMMER die iTunes-Erweiterung hinzugefügt? Und jetzt bitte nicht mit &#8220;<strong>das hat historische Gründe</strong>&#8221; kommen. Es sind übrigens noch mehr sinnfreie Standarderweiterungen dabei.</p>
<p>Aller guten Dinge sind doch drei, also brauchen wir auch noch einen dritten Punkt. Kein Problem, den liefert das System von selbst. Wir waren ja gerade bei der iTunes-Implementierung. Nehmen wir an, ich baue eine Erweiterung für phphatesme. Kann ja mal vorkommen. Diese soll das Element &#8220;<code>phm:Duration</code>&#8221; hinzufügen und füllen. Die Methode bei meiner Externsion heißt dann <code>setPhmRssDuration()</code>. Das dumme daran ist, wenn ich die Methode so nenne, dann wird mir autormatisch das iTunes-Feld Duration auch gefüllt. Warum das? jede Methode wird auf alle registrierten Erweiterungen aufgerufen, deswegen haben sie auch alle eine magische __call Methode, die halt nichts macht, wenn die nötige Methode nicht existiert. Die iTunes-Erweiterung prüft nämlich ob Name der Methode, die aufgerufen wir existiert, indem es die ersten 9 Zeichen abschneidet, ein setItunes oder addItunes davorstellt und ein method_exists aufruft. Tja dummerweise trifft das auf meine <code>setPhmRssDuration()</code> auch zu und somit wird das Feld Duration gefüllt. Dummerweise habe ich dann das itunes:duration Feld im Feed auch mit drinnen. (<em>Wie das genau funktioniert, müsste ich mir aber nich mal angucken, war nur grad so schön um Fluss</em>)</p>
<p>Ach tut das gut sich mal wieder aufzuregen. Ansonsten ist das Zend_Writer System schon ganz nett zu nutzen und an vielen Stellen gut durchdacht. Ich werde die Tage wohl einfach mal erklären, wie man eigene Extensions schreibt, denn dazu habe ich keine gute Doku gefunden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/wtf/rss-feeds-erweitern-im-zend-framework/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Kann mal jemand Monsieur Potencier Visio schenken?</title>
		<link>http://www.phphatesme.com/blog/wtf/kann-mal-jemand-monsieur-potencier-visio-schenken/</link>
		<comments>http://www.phphatesme.com/blog/wtf/kann-mal-jemand-monsieur-potencier-visio-schenken/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 06:00:37 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Tools & Helferlein]]></category>
		<category><![CDATA[What the f***!]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=5225</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Es gibt Tage, an deinen möchte man die ganze Welt umarmen. Da läuft alles toll, alles was man sucht findet man auch. Und es gibt Tage wie gestern. Da steht man vor einem Problem, sucht ein paar Stunden und muss dann irgendwann aufgeben, weil das doofe Internet keine Antwort auf die Frage kennt. <span id="more-5225"></span></p>
<p>In meinem gestrigen Fall war das Internet ganz sicher nicht der Hauptschuldige. Ich schiebe es eher Fabien Potencier in die Schuhe. Ja genau, dem &#8220;Erfinder&#8221; von Symfony. Aber vielleicht hole ich ein wenig weiter aus, denn so einfach ist das nämlich gar nicht. Ich musste für eines unserer Projekte ein Schaubild aufzeichnen, das zeigt, wie eine HTTP-Anfrage durch die Applikation geschleppt wird und dann irgendwann als Response endet. Klingt eigentlich einfach so ein Prozessdiagramm aufzusetzen, wenn man sich in seinen Projekten an den Symfony-Standard hält. Denkste! Ich habe im ganzen Netz gesucht &#8211; und ich meine wirklich alle 762545142125434 Seiten. Nichts!</p>
<p>Irgendwie scheint es dieses Schaubild nicht zu geben. Ist es denn wirklich möglich, dass ich der Einzige bin, der so etwas hilfreich findet? Man findet immer nur die folgende Grafik:</p>
<p><img class="alignleft size-full wp-image-5228" title="platform" src="http://www.phphatesme.com/upload/2010/02/platform.png" alt="platform" width="520" />Ich habe bis heute nicht verstanden, wie ich dieses Schaubild zu lesen habe. Egal, passt wunderbar zu meiner Laune.  Wahrscheinlich gibt es die ganzen Diagramme und Grafiken unter diagramme.symfony-project.org und ich bin nur zu doof sie zu finden, aber vielleicht eben auch nicht und dann habe ich allen Grund mich aufzuregen.</p>
<p>Geht es euch nicht auch so, dass ihr gerne grafisch aufbereitet eure Architektur vor euch habt? Vielleicht auch noch die einzelnen Schichten in einem weiteren bunten Bildchen. Wie soll ich denn sonst auf Anhieb wissen, was ich darf und was nicht.</p>
<p>Was bedeutet das ganze für mich? Ich werde es selbst machen müssen, falls nicht einer von euch bereits eine Lösung hat. Dann werde ich das Bild nehmen und Monsieur Potencier schicken, so dass er es veröffentlichen kann oder auch nicht.</p>
<p>So heute war der Artikel mal wieder ohne Mehrwert für euch. Aber <strong>mir </strong>geht es besser. Tut doch manchmal gut, den ganzen Frust rauszulassen und mal wieder festzustellen, dass PHP mich wirklich hasst. Ach ja, vielleicht hat ja jemand Lust mal zu zeigen, welche Standarddiagramme es so in der Softwaretechnik gibt und diese vorstellt. Falls sich niemand findet, dann mache im Notfall ich das auch gerne. Dann habt ihr doch was von diesem Artikel gehabt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/wtf/kann-mal-jemand-monsieur-potencier-visio-schenken/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Die magische Leere</title>
		<link>http://www.phphatesme.com/blog/wtf/die-magische-leere/</link>
		<comments>http://www.phphatesme.com/blog/wtf/die-magische-leere/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 06:00:33 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[What the f***!]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=5215</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>So nachdem wir den Freitag ja noch fast friedlich zu ende gebracht haben, widmen wir uns heute mal wieder einem technischen Thema, dass ich jetzt gerade übrigens ins OpenOffice tippe. Toll, oder? Geht so! Wisst ihr was aber wirklich toll ist? Unser Workshop für die International PHP Conference wurde angenommen. Wer als etwas zum Thema „advanced Eclipse“ wissen will, der sollte vorbei schauen. Werde einen halben Tag zusammen mit Bastian Feder und vielleicht Sven Kiera über ein paar PDT Features reden, die ihr noch nicht kennt (hoffe ich einfach mal). <span id="more-5215"></span></p>
<p>Die letzte Woche bin ich mal wieder über ein mir schon bekanntes Problem mit PHP und empty gestoßen. Mir ist aber aufgefallen, dass ich es noch nie dokumentiert habe und ich dies mal nachholen sollte, bevor ich wieder alles vergessen habe und das Wissen für immer in den Tiefen des Internets verschwindet. Außerdem ist es gut, wenn man es mal gelesen hat und sich dann wieder erinnert.</p>
<p>Wow, schon fast der ganze Artikel rum und ich habe noch kein Wort über das eigentliche Thema geschrieben. Ist auch neuer Rekord im „drumrumreden“. Wobei geht es also heute? PHP verhält sich bei der empty Methode ein wenig anders als man es erwartet, wenn man damit auf magische Methoden losgeht. Ein kleines Beispiel:</p>
<pre><code>class MagicClass
{
	public $theArray = array( '1' );

	public function __get( $name )
	{
		return array( '1' );
	}
}
$magic = new MagicClass();
var_dump( empty( $magic-&gt;theArray ) );
var_dump( empty( $magic-&gt;theMagicArray ) );</code></pre>
<p>Wir wissen alle, dass die magische __get Methode immer dann aufgerufen wird, wenn man auf  ein Attribut lesend zugreift, welches nicht existiert. Wenn man sich das Beispiel anschaut, so müsste beide var_dump ein false zurückliefern. Tun sie aber leider nicht. Der erste Aufruf, mit dem existierenden Attribut liefert natürlich ein false. So weit so gut. Der zweite Aufruf aber leider nicht. Komischerweise wird die magische Methode gar nicht aufgerufen und somit kommt dort etwas leeres zurück und das ist natürlich empty.</p>
<p>Mit ein wenig rumgooglen könnte man jetzt wahrscheinlich rausfinden was genau kaputt ist, da ich aber gerade im Zug von Freiburg nach Hamburg sitze und keinen Internetzugang habe, muss ich das euch oder einem der kommenden Artikel überlassen.</p>
<p><strong>Lösung</strong>: Danke erstmal an KingCrunch und Sebastian. Die Lösung des Problems ist einfach. Die empty Funktion erwartet, dass die magische Methode __isset( ) auch mit Leben gefüllt ist, dann klappt das ganze nämlich ohne Probleme.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/wtf/die-magische-leere/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Separation of Concerns</title>
		<link>http://www.phphatesme.com/blog/wtf/separation-of-concerns/</link>
		<comments>http://www.phphatesme.com/blog/wtf/separation-of-concerns/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 06:00:54 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Softwaretechnik]]></category>
		<category><![CDATA[What the f***!]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=5123</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Den heutigen Tag widmen wir mal wieder einem Programmierparadigma. Separation of Concerns. Klingt es komisch, wenn ich sage, dass es wahrscheinlich das einfachste und zugleich schwierigste Paradigma ist? Ich denke schon.<span id="more-5123"></span></p>
<p>Fangen wir mal mit der einfachen Seite an. Separation of Concencs (SOC) bedeutet eigentlich nur, dass Funktionalitäten klar voneinander getrennt sind. Konsequenz daraus ist zum Beispiel, dass jede Methode nur genau eine Sache macht. Wenn man diesen Ansatz konsequent verfolgt, steigt auch die Wiederverwendbarkeit der Komponenten. Klingt einach? Finde ich auch. Nur warum zum Teufel beachtet das niemand?</p>
<p>Fast immer wenn ich fremden Code reviewe, finde ich Stellen, an denen es nicht beherzigt wurde kleine Trennungen von Aufgaben zu gewährleisten. Scheint also doch nicht so einfach zu sein ein Gespür dafür zu entwickeln, wann ich denn jetzt SOC betreiben sollte. Mein Fluchen von vorhin war übrigens eher theatralisch gemeint, ich habe früher ja selbst das &#8220;Gespür&#8221; dafür nicht gehabt. Einigen wir uns also drauf, dass es vielleicht doch nicht so einfach ist.</p>
<p>Was mir immer geholfen hat bei diesem Thema ist eine ganz spezielle Frage. <strong>Wo würdest du diese Funktionität vermuten, wenn du sie noch mal brauchen würdest?</strong> Am besten dabei in einen anderen Entwickler versetzen. Wenn du ganz bestimmt nicht an der Stelle danach Ausschau halten würdest, an der du es jetzt programmiert hast, dann ist es mit Sicherheit die falsche Position.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Separation of concerns</p>
<p>Den heutigen Tag widmen wir mal wieder einem Programmierparadigma widmen. Separation of</p>
<p>Concerns. Klingt es komisch, wenn ich sage, dass es wahrscheinlich das einfachste und</p>
<p>zugleich Schwierigste Paradigma ist? Ich denke schon.</p>
<p>Fangen wir mal mit der einfachen Seite an. Separation of Concencs (SOC) bedeutet eigentlich</p>
<p>nur, dass Funktionalitäten klar voneinander getrennt sind. Konsequenz daraus ist zum</p>
<p>Beispiel, dass jede Methode nur genau eine Sache macht. Wenn man diesen Ansatz konsequnt</p>
<p>verfolgt, steigt auch die Wiederverwendbarkeit der Komponenten. Klingt einach? Finde ich</p>
<p>auch. Nur warum zum Teufel beachtet das niemand?</p>
<p>Fast immer wenn ich fremden Code reviewe finde ich stellen, an denen es nicht beherzigt</p>
<p>wurde kleine Trennungen von Aufgaben zu gewährleisten. Scheint also doch gar nicht so</p>
<p>einfach zu sein ein Gespür dafür zu entwickeln, wann ich denn jetzt SOC betreiben sollte.</p>
<p>Mein Fluchen von vorhin war übrigens eher theatralisch gemeint, ich habe früher ja selbst</p>
<p>das &#8220;Gespür&#8221; dafür nicht gehabt. Einigen wir uns also drauf, dass es vielleicht doch nicht</p>
<p>so einfach ist.</p>
<p>Was mir immer geholfen hat bei diesem Thema ist eine ganz spezielle Frage. Wo würdest du</p>
<p>diese Funktionität vermuten, wenn du sie noch mal brauchen würdest? Am besten dabei in einen anderen Entwickler versetzen. Wenn du ganz bestimmt nicht an der Stelle danach ausschau halten würdest, an der du es jetzt programmiert hast, dann ist es mit Sicherheit die falsche Position.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/wtf/separation-of-concerns/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t reinvent the squared wheel &#8211; The &#8220;Symfony&#8221; way</title>
		<link>http://www.phphatesme.com/blog/wtf/dont-reinvent-the-squared-wheel-the-symfony-way/</link>
		<comments>http://www.phphatesme.com/blog/wtf/dont-reinvent-the-squared-wheel-the-symfony-way/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 06:00:45 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[What the f***!]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=4943</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Heute habe ich mal wieder vor mich ein wenig aufzuregen. Und zwar geht es um die Art und Weise, wie Sensio das Rad immer wieder neu erfinden. Wer es nicht weiß, Sensio ist die Firma hinter dem Symfony Framework. Deswegen auch die Überschrift.<span id="more-4943"></span></p>
<p>Wenn man sich mal ein wenig mit der Firma beschäftigt, dann fällt einem auf, dass sie anscheinend sehr gerne Dinge neu erfinden. Und das nicht nur einmal, sondern öfters. Fangen wir mal an, mit den Dingen, die mir bekannt sind.</p>
<h3>Framework</h3>
<p>Ok, das ist fies. Symfony ist echt eines der besten Frameworks auf dem Markt und hat bestimmt seine Existenz verdient. Trotzdem haben sie sich hingesetzt und haben für ihre Arbeiten ein „eigenes“ System entworfen.</p>
<h3>Unit Test</h3>
<p>Tja wenn man entwickelt, dann muss man auch testen. Was nehmen wir denn am besten zum Unit Testing? Ihr meint phpUnit? Nein. Wir schreiben einfach ein neues System namens Lime. Das ist bestimmt eines Tages viel besser als phpUnit. Halten wir uns an xUnit Standards? Ne auch nicht. Finde ich relativ daneben den Ansatz.</p>
<h3>Continuous Integration</h3>
<p>Ich hatte ja mal vor kurzem einen Artikel geschrieben das Unit Testing nichts wert ist ohne CI. Dazu stehe ich auch immer noch. Ich würde auch sagen, dass es da mit Cruise Control und phpUnderControl sehr gute Systeme gibt, die man nutzen kann. Nein Sensio macht da selbst was intern und verwendet dies.</p>
<h3>Pear Channel</h3>
<p>Software will ja auch ausgerollt werden. Der PEAR Installer löst da sehr viele Probleme. Das haben auch die Jungs hinter Symfony gedacht und haben sich gleich mal einen eignen PEAR Server gebastelt, der das Ausrollen unterstützt. Doof, oder?</p>
<p>So das waren auch schon die Fakten, von denen ich weiß. Ich will hier jetzt kein Framework gebashe draus machen. Es geht mir einfach nur drum, dass man, wenn man nicht zufrieden ist mit den Lösungen, die der Markt so bietet, sich doch bitteschön hinsetzt und die existierenden Lösungen aufbohrt (entschlackt). Ist ja schließlich alles Open Source, was ich gerade aufgezählt habe. Damit erspart man sich jede Menge arbeit.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/wtf/dont-reinvent-the-squared-wheel-the-symfony-way/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

