<?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>UGamela Blog &#187; PHP</title>
	<atom:link href="http://ugamela-blog.pheelgood.net/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://ugamela-blog.pheelgood.net</link>
	<description>Entwicklung eines Browsergames</description>
	<lastBuildDate>Mon, 12 Dec 2011 18:28:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>JavaScript (NodeJS) vs. PHP vs. Python</title>
		<link>http://ugamela-blog.pheelgood.net/2011/05/31/javascript-nodejs-vs-php-vs-python/</link>
		<comments>http://ugamela-blog.pheelgood.net/2011/05/31/javascript-nodejs-vs-php-vs-python/#comments</comments>
		<pubDate>Tue, 31 May 2011 18:12:30 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmiersprachen]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Vergleich]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=359</guid>
		<description><![CDATA[Ein Vergleich zur Wahl der richtigen Programmiersprache hinsichtlich einer speziellen Browsergame Architektur. Themen sind Entstehung, Stil, Verbreitung, Platform und Frameworks.]]></description>
			<content:encoded><![CDATA[<p>Ich habe schonmal einen ähnlichen Artikel geschrieben, der allerdings mittlerweile veraltet ist und die meisten Seitenaufrufe meines Blogs produziert. <a href="http://ugamela-blog.pheelgood.net/2009/01/25/vergleich-php-vs-python-browsergame">http://ugamela-blog.pheelgood.net/2009/01/25/vergleich-php-vs-python-browsergame</a></p>
<p>Im letzten Artikel habe ich bereits über erste Erfahrungen mit NodeJS gesprochen: <a href="http://ugamela-blog.pheelgood.net/2011/04/29/nodejs/">http://ugamela-blog.pheelgood.net/2011/04/29/nodejs/</a></p>
<p>Hier soll nun, ähnlich wie letztes Mal, ein Vergleich von Programmiersprachen stattfinden, wieder hinsichtlich der Entstehung eines Browsergames. Dies ist kein allgemeiner Vergleich und teils eine subjektive Meinung.</p>
<p>Des weiteren geht es um die Erschaffung eines OpenSource-Browsergames. Mit der Architektur stellt sich auch die Frage der richtigen Programmiersprache, die für diesen Fall am besten geeignet ist.</p>
<p>Die Platform ist für den Client &#8211; den Spieler &#8211; sein Browser, somit eine Website oder gar WebApplication. Hier steht nur eine Sprache zur Wahl: JavaScript. (Ich hasse Flash).</p>
<p>JavaScript wird mittlerweile von entwickelten Engines optimiert und sogar teils compiliert, auch größere Konstrukte sind im Browser möglich, es kann Rechenlast (Server-&gt;Client) ausgelagert werden.</p>
<p>Serverseitig ist die Auswahl größer. Letztlich lässt sich in fast jeder Sprache ein Server schreiben. Die meistverwendetsten sind wohl PHP, Java, Ruby, Python und Perl.</p>
<p>Java bleibt hier außen vor, und über Ruby (zu langsam) und Perl (zu häßlich) möchte ich nicht schreiben.</p>
<h3>Entstehung:</h3>
<p>JavaScript, PHP und Python hatten verschiedene Entstehungsbedingungen und Intentionen, sind daher auch für verschiedene Aufgaben geeigneter.</p>
<ul>
<li>PHP: Hypertext-Preprocessor. Als Templatesprache gedacht und dann für Webprogrammierung ausgeweitet.</li>
<li>Python: Für besonders gute Lesbarkeit entwickelt. Allzwecksprache.</li>
<li>JavaScript: Mehr Möglichkeiten zur Benutzerinteraktion auf Websites, HTML und CSS sind nicht turingvollständig. Komplizierte Entwicklung.</li>
</ul>
<p>Zuletzt ist JavaScript stark beeinflusst durch den Browserkrieg. PHP ist etabliert, Python ist einfach schön.</p>
<h3>Stil:</h3>
<p>Prozedural, funktional, objektorientiert &#8211; das können alle drei, wobei prozedurale Programmierung in Python wohl Missbrauch wäre und PHP objektorientierte und funktionale Aspekte vor nicht allzu langer Zeit gelernt hat. JavaScript kommt mit einem minimalen Wortschatz aus und ist zudem klassenlos, kann aber Klassen ohne viel Aufwand nachbilden. Für mich ist ordentliche Objektorientierung wichtig. Der Prototypenbasierte Ansatz bei JavaScript gefällt mir.</p>
<h3>Bedingungen:</h3>
<p>Bei einem Browsergame ist eine Menge Kommunikation von Programmen erfordlich (Client-Server), besonders wenn es ein verteiltes System werden soll. Wobei jeder Server zumindest 100-1000 Spieler gleichzeitig aushalten sollte.</p>
<h3>Platform:</h3>
<p>PHP wird meist über (FastCGI) an einen Apachen oder anderen Webserver angebunden, der für jede Anfrage einen neuen Thread aufgemacht, der die Anfrage dann verarbeitet. Ein Thread hat jeweils einen eigenen Adressraum, teil sich keinen Arbeitsspeicher mit den anderen Threads. Für 100-1000 simultane Spieler braucht man dann halt einen leistungsstärkeren und teureren Server. Gleichzeitig konkurieren die Threads die ganze Zeit um die Datenbank.</p>
<p>NodeJS unterscheidet sich deutlich in der Architektur, welche aus dem Browser abstammt. Es gibt zwar die Möglichkeit Arbeit in Threads auszulagern, die sollte aber normalerweise nicht notwendig sein. Die Verarbeitung von Requests erfolgt ereignisgesteuert, Timeouts und Events werden von einer Schleife ausgeführt, die die ganze Zeit läuft (ein einziger Prozess). Abfragen mit verknüpfter Wartezeit (Datenbank, Dateisystem) werden asynchron ausgeführt. Während gewartet wird, widmet sich der Prozess eventuell bereits der nächsten HTTP-Anfrage.</p>
<p>Auch kommt hier eine Möglichkeit hinzu, die mir bei PHP gar nicht in den Sinn kam: Alle Requests teilen sich einen Adressraum und können auf den selben Arbeitsspeicher bzw. die selben Objekte im Code zugreifen. Deadlocks sind relativ unproblematisch, weil eh nur eine Anfrage zur Zeit verarbeitet wird. Natürlich gibt es Bibliotheken die auch für PHP Objekte im RAM cachen können, doch insgesamt gestaltet es sich deutlich einfacher in NodeJS. Das Array einfach eine Scope-Ebene drüber deklariert, und schon können alle darauf zugreifen. Ich plane die Datenbank komplett im RAM zu halten und alle paar Sekunden eine Schreiboperation an eine simple Datenbank zu schicken, die die Objekte versioniert (so kann dann im Falle eines Absturzes das Spiel wiederhergestellt werden).</p>
<p>Python ist auch in der Lage Objekte über den Applicationscope zu teilen.</p>
<h3>Verbreitung:</h3>
<p>Deutlich für PHP und Python spricht ihr Alter und ihre Verbreitung. Doch NodeJS ist gut dabei bald in die selbe Liga aufzusteigen. Gerade auch mit dem Cloud-Hype wird NodeJS immer beliebter. Ein kleiner Server mit NodeJS ist in der Amazon Cloud schnell installiert, aufrüsten gestaltet sich deutlich einfacher als auf einem normalen Server.</p>
<h3>Frameworks:</h3>
<p>Frameworks bilden sich für NodeJS erst langsam, da ist bei PHP und Python schon deutlich mehr Auswahl und Umfang enthalten. Mit Frameworks lässt sich natürlich Arbeit sparen, andererseits bläht es das System aber auch unnötig auf. Wieso ein großes Framework verwenden, wenn man denn doch nur einen kleinen Teil der Funktionalität braucht.</p>
<h3><span style="text-decoration: underline;">Fazit: </span></h3>
<p>Es gibt keinen eindeutigen Sieger. Für mich selbst hat PHP allgemein verloren, weil ich an seine Grenzen gestoßen bin. Mit Python lässt sich in diesem Fall auch arbeiten, aber dann müssen Server- und Clientseite separat implementiert werden. NodeJS unterscheidet sich vor allem in der Herangehensweise und grundsätzlich in der asynchronen Architektur, da ist erstmal umdenken angesagt, wenn man vorher nur synchron programmiert hat.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2011/05/31/javascript-nodejs-vs-php-vs-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Dekorierer (Decorator) [vs. Vererbung]</title>
		<link>http://ugamela-blog.pheelgood.net/2009/02/24/design-patterns-dekorierer-decorator-vs-vererbung-php/</link>
		<comments>http://ugamela-blog.pheelgood.net/2009/02/24/design-patterns-dekorierer-decorator-vs-vererbung-php/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 16:10:45 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[Entwurfsmuster]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=201</guid>
		<description><![CDATA[Hab ja schon lange nichts mehr geschrieben, greife nun den Gedanken etwas über Design Patterns zu schreiben wieder auf. Vorerst muss ich darauf hinweisen, dass ich kein Profi bin und hier meine subjektive Meinung vertrete. Dies wird also kein Eintrag wie aus dem Lehrbuch, ich versuche nur etwas auf meine Weise klar zu machen. Einleitung [...]]]></description>
			<content:encoded><![CDATA[<p>Hab ja schon lange nichts mehr geschrieben, greife nun den Gedanken etwas über Design Patterns zu schreiben wieder auf.</p>
<p>Vorerst muss ich darauf hinweisen, dass ich kein Profi bin und hier meine subjektive Meinung vertrete. Dies wird also kein Eintrag wie aus dem Lehrbuch, ich versuche nur etwas auf meine Weise klar zu machen.</p>
<blockquote><p>Einleitung der <a title="Viererbande" href="http://de.wikipedia.org/wiki/Viererbande_(Softwareentwicklung)" target="_blank">GoF</a>: <em>Favorisiere Zusammensetzung vor Vererbung (&#8220;Favor object composition over class inheritance&#8221;) </em></p></blockquote>
<p><em>Vererbung</em> sollte für jeden, der schon mal ein paar Klassen geschrieben hat, klar sein; Stichwort dazu ist (in PHP) &#8220;extends&#8221;. <em>Komposition</em> ist schon ein wenig schwieriger. Die wichtigste Rolle spielt hier der <em>Dekorierer</em>.  <span id="more-201"></span></p>
<p>Hier nun ein bischen PHP-Code, hoffentlich schon selbsterklärend:</p>
<pre class="brush: php; title: ; notranslate">
interface Etwas
{
public function tuWas();
}
class EtwasImplementation implements Etwas
{
public function tuWas()
{
return 'Etwas tut was.';
}
}
class AnderesEtwas implements Etwas
{
public function tuWas()
{
return 'Dieses Etwas tut was Anderes, evtl. Ähnliches auf andere Weise.';
}
}
class EtwasDekorierer implements Etwas
{
protected $_Etwas;
public function __construct(Etwas $Etwas)
{
$this-&gt;_Etwas = $Etwas;
}
public function tuWas()
{
return $this-&gt;_Etwas-&gt;tuWas().' Und der Dekorierer verarbeitet das noch weiter, kann jedes Etwas erweitern.';
}
}</pre>
<p>Wie man sieht ist der EtwasDekorierer selbst ein Etwas, kann auch jeder Zeit die Stelle eines Etwas einnehmen, wie als würde er davon abstammen (Vererbung). Der klare Vorteil gegenüber der Vererbung ist nun, dass der EtwasDekorierer sowohl die EtwasImplementation als auch AnderesEtwas erweitern kann. Das, was erweitert wird, wird dadurch austauschbar. Mehrere Dekorierer lassen sich übrigens hervorragend verschachteln.</p>
<p>Hier noch ein kleines, etwas konkreteres Beispiel:</p>
<pre class="brush: php; title: ; notranslate">
class Logger # soll Methodenaufrufe des dekorierten Objekts loggen.
{
    protected $_Object;
    public function __construct($Object) #ggf prüfen ob es ein Objekt eines bestimmten Typs ist (per Typehint)
    {
        $this-&gt;_Object = $Object;
    }
    public function __call($method, $args);
    {
         printf('Methode %s eines Objekts der Klasse %s wurde aufgerufen \n', $method, get_class($this-&gt;_Object));
         # Hier kann man natürlich je nach Bedarf etwas Anderes einbauen... (e.g. In Datei schreiben etc.etc..)
         return call_user_func_array(array($this-&gt;_Object, $method), $args);
    }
}</pre>
<p>Der Nachteil am Dekorierer ist, dass man alles delegieren, also weiterleiten, muss. Besonders wenn der Dekorierer nur einen Teil der Methoden verändern soll ist das nervig alle Methoden an das dekorierte Objekt weiterzuleiten. PHP5s __call() kann da praktisch sein, obwohl dann zu überdenken ist, ob der Dekorierer nicht unnötig ist, gerade in PHP, wo OOP weniger performant ist.</p>
<p>Insgesamt wird mit dem Dekorierer eine weniger feste Bindung zwischen den Objekten gelegt, dadurch wird das Design flexibler.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2009/02/24/design-patterns-dekorierer-decorator-vs-vererbung-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Vergleich PHP vs. Python</title>
		<link>http://ugamela-blog.pheelgood.net/2009/01/25/vergleich-php-vs-python-browsergame/</link>
		<comments>http://ugamela-blog.pheelgood.net/2009/01/25/vergleich-php-vs-python-browsergame/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 20:55:55 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=189</guid>
		<description><![CDATA[PHP muss nicht so schlecht sein, wie alle sagen. Mit PHP lassen sich auch größere Projekte verwirklichen, aber dafür gedacht ist es weniger. Für kleine Sites ohne größeren serverseitigen Rechenaufwand ist es gut geeignet und auch überschaubar. Mit PHPs OOP lässt sich etwas anfangen, aber die Vorzüge echter objekt orientierter Sprachen bietet es nicht. Am Ruf darf man sich dann nicht stören.

Python sollte verwendet werden wenn OOP von belang ist, damit hebt es sich am stärksten von PHP ab. Wenn auf eurem Webspace Python verfügbar ist, dann kann ich nur dazu animieren das einmal auszuprobieren!]]></description>
			<content:encoded><![CDATA[<p>Dieser Artikel ist mittlerweile veraltet. Für eine neuere Version, auch hinsichtlich NodeJS bitte diesem Link folgen: <a href="../2011/05/31/javascript-nodejs-vs-php-vs-python/">http://ugamela-blog.pheelgood.net/2011/05/31/javascript-nodejs-vs-php-vs-python/</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>PHP und Python unterscheiden sich stark, daher wird dieser Vergleich vor allem auf die Verwendbarkeit für ein Browsergame abzielen.</p>
<p><span id="more-189"></span></p>
<p>Python lässt sich, im Gegensatz zu PHP, welche eine pure Websprache ist, für jegliche Anwendung verwenden. PHP wird sehr gerne für Websiten verwendet, der Code ist schnell geschrieben, besondere Strukturen würden zwar nicht schaden, sind aber nicht von Nöten, weshalb kaum einer sich wirklich Mühe gibt. Dementsprechend ist auch der Ruf sehr schlecht. Es gibt viel zu viel Spaghetticode, allein UGamela war ein Beweis.</p>
<p>Ich persöhnlich habe mich sehr mit OOP und Designpatterns angefreundet und überzeugt ein gut strukturiertes stabiles Spielgerüst zu bauen. Es ist eindeutig ein Anreiz einmal OpenSource-Code mit Qualität aufzubauen, es wird viel zu viel geklagt wenn man sich mal umhört. Auch da geht der Abscheu zu PHP mit einher. Wenn man in höheren Kreisen erzählt man schreibe ein Browsergame in PHP wird man komisch angesehn. Zu Recht, denn PHP scheint denkbar ungeeignet:</p>
<p>Ein Browsergame ist mit nichts im Web wirklich vergleichbar und trotzdem versucht man es in einer Scriptsprache zu schreiben, die denkbar ungeeignet ist, schon allein aufgrund Performance. Um den Überblick im Spiel halten zu können (Wartbarkeit) und auch mal kurz neue Features einzufügen oder zu testen (Erweiterbarkeit &amp; Flexibilität) muss der Code gut strukturiert sein, sonst wird das nach kürzester Zeit chaotisch, wenn er es nicht sowieso schon war.</p>
<p>Noch ein paar weitere Dinge die ich für das Spiel brauche:</p>
<ol>
<li>Eine einfache Sprache, denn das Spiel soll möglichst von jedem erweitert werden können</li>
<li>Verfügbarkeit auf Webservern, evtl. Webspaces und wenig Installationsaufwand</li>
<li>Wahrscheinlich ein CMS oder Framework, das mir Funktionen zur Userverwaltung abnimmt</li>
</ol>
<p>1) Bieten PHP und Python beide, mir scheint Python sogar noch einfacher durch das Wegfallen der Klammern und die automatische Einrückung.</p>
<p>2) Hier schlägt PHP eindeutig Python, es ist quasi überall verfügbar, Standard.</p>
<p>3) In PHP sowie auch Python vorhanden, den PHP Frameworks wird aber allen keine besonders gute Performance zugesprochen.</p>
<p><em><strong><br />
</strong></em></p>
<p><em><strong>Allgemeines Fazit:</strong></em></p>
<p>PHP muss nicht so schlecht sein, wie alle sagen. Mit PHP lassen sich auch größere Projekte verwirklichen, aber dafür gedacht ist es weniger. Für kleine Sites ohne größeren serverseitigen Rechenaufwand ist es gut geeignet und auch überschaubar. Mit PHPs OOP lässt sich etwas anfangen, aber die Vorzüge echter objekt orientierter Sprachen bietet es nicht. Am Ruf darf man sich dann nicht stören.</p>
<p>Python sollte verwendet werden wenn OOP von belang ist, damit hebt es sich am stärksten von PHP ab. Wenn auf eurem Webspace Python verfügbar ist, dann kann ich nur dazu animieren das einmal auszuprobieren!</p>
<p><em><strong>Mein Fazit:</strong></em></p>
<p>Python ist denkbar besser geeignet, vor allem weil ich mir soviel Struktur wünsche. Ich freue micht jetzt schon auf den sauberen Code, habe die Semikolons und Klammern satt. Ein einfacher (billig) Webspace ist sowieso denkbar ungeeignet für ein Browsergame. PostgreSQL wird hervorragend passen, das unterstützt sogar innerhalb Python Aufrufe (Ersatz für die MySQL Procedures). In wieweit ich ein Framework wie Zope, Django oder Pylons zur Hand nehme steht noch nicht fest.</p>
<p>Ich möchte hiermit alle UGamela Interessierten dazu auffordern einmal in Python hineinzuschnuppern, der Aufwand könnte sich lohnen!</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2009/01/25/vergleich-php-vs-python-browsergame/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Typen von Referenzen in PHP, Objekte löschen</title>
		<link>http://ugamela-blog.pheelgood.net/2008/12/19/typen-von-referenzen-in-php-objekte-loeschen/</link>
		<comments>http://ugamela-blog.pheelgood.net/2008/12/19/typen-von-referenzen-in-php-objekte-loeschen/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 12:59:48 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=175</guid>
		<description><![CDATA[Wieder was gelernt: Es gibt in PHP zwei Typen von Objektreferenzen, auch wenn es keine Dokumentation dazu gibt (Wer eine findet bitte sagen..!). Im Handbuch steht nur: Objekte werden immer als Referenz übergeben Das stimmt natürlich, nur ist es nicht ganz so einfach. Das Problem fällt allerdings erst auf, wenn man Objekte kontrolliert zerstören will. [...]]]></description>
			<content:encoded><![CDATA[<p>Wieder was gelernt:</p>
<p>Es gibt in PHP zwei Typen von Objektreferenzen, auch wenn es keine Dokumentation dazu gibt (Wer eine findet bitte sagen..!).</p>
<p>Im Handbuch steht nur: <em>Objekte werden immer als Referenz übergeben</em></p>
<p>Das stimmt natürlich, nur ist es nicht ganz so einfach. Das Problem fällt allerdings erst auf, wenn man Objekte kontrolliert zerstören will.</p>
<blockquote><p>$obj = NULL; # (1)</p></blockquote>
<p>Sollte ein Objekt zerstören, wie unset(). Doch was wenn man vorher</p>
<blockquote><p>$obj2 = $obj;</p></blockquote>
<p>gemacht hat? Plötzlich zerstört der erste Befehl (1) nichtmehr, er setzt nur die erste Variable auf NULL. Nun das selbe ein bischen verändert:</p>
<blockquote><p>$obj2 = &amp;$obj; # &amp; für Referenz sollte eigentlich nicht nötig sein</p></blockquote>
<p>(1) Führt nun dazu, dass beide Variablen NULL sind. Huch?</p>
<p>Diese Referenzen heißen entweder hard/soft oder echt/unecht, wie auch immer.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2008/12/19/typen-von-referenzen-in-php-objekte-loeschen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PHP5 OOP Interfaces</title>
		<link>http://ugamela-blog.pheelgood.net/2008/12/09/php5-oop-interfaces/</link>
		<comments>http://ugamela-blog.pheelgood.net/2008/12/09/php5-oop-interfaces/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 21:31:23 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Datenbankabtraktion]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=168</guid>
		<description><![CDATA[Zu Deutsch &#8220;Schnittstellen&#8221;. Ich habe gemerkt, dass dieser Begriff sofort zu einer Fehlinterpretation führt, jedenfalls wars bei mir so. Ich hab diesen ganzen OOP Kram sowieso mind. zehn Mal lesen müssen, bis ich ihn annähernd gerafft hab. Einige Sachen sind mir immer noch unklar. Die letzten Tage bin ich aber endlich darauf gekommen, wofür man [...]]]></description>
			<content:encoded><![CDATA[<p>Zu Deutsch &#8220;Schnittstellen&#8221;. Ich habe gemerkt, dass dieser Begriff sofort zu einer Fehlinterpretation führt, jedenfalls wars bei mir so. Ich hab diesen ganzen OOP Kram sowieso mind. zehn Mal lesen müssen, bis ich ihn annähernd gerafft hab. Einige Sachen sind mir immer noch unklar.</p>
<p>Die letzten Tage bin ich aber endlich darauf gekommen, wofür man diese Interfaces in PHP verwenden kann.</p>
<h3>Zuerst einmal: <span style="text-decoration: underline;">Was ist so ein Interface?</span></h3>
<p>Interfaces sind Klassen, die bestimmte Funktionen vorbestimmen. Die Funktionen bilden dann eine Schnittstelle, also eine bestimmte Möglichkeit von anderen Objekten angesprochen zu werden. Im Gegensatz zu anderen Klassen werden Schnittstellen implementiert (&#8220;implements&#8221;). Dadurch kann eine Klasse mehrere Schnittstellen haben, aber nur von einer einzigen normalen Klasse abstammen.</p>
<p>Man muss also nur die Schnittstelle kennen, um die Klasse verwenden zu können, die sie implementiert. Anders gesagt, man kann die Klasse so verwenden wie man die Schnittstelle als Klasse verwenden würde.</p>
<h3>Sehr konkrete Beispiele liefert PHP selbst mit einigen Schnittstellen:</h3>
<p>ArrayAcces: Die Objekte einer Klasse lassen sich wie Arrays ansprechen.<br />
Iterator: Die Eigentschaften einer Objekts lassen sich iterieren, also auf eine bestimmte Weise durchlaufen.</p>
<h3>Interfaces lassen sich aber auch noch weit abstrakter verwenden:</h3>
<p>Ich schreibe ein Interface Datenbankverbindung, das ich aus praktischen Gründen dokumentiere. Ich weise nochmal darauf hin, dass dieses Interfaces keinen Programmcode enthält, es gibt nur Struktur vor.</p>
<p>Danach schreibe ich einen Dekorierer für meine mysqli Klasse und achte derweil auch etwas darauf, wie PDO aufgebaut ist, denn wahrscheinlich wird das eine weitere mögliche Datenbankverbindung (-&gt;Interfacename&#8230;) mysqli wird etwas zurechtgebogen und erweitert.</p>
<p><span style="text-decoration: underline;"><strong>Resultat:</strong></span> Ich kann verschiedene Datenbankklassen nach ein paar Anpassungen verwenden. Ich benutze mysqli, weil es anscheinend die schnellste ist, was MySQL angeht. Letztlich verwende ich Typehints auf &#8220;Datanbankverbindung&#8221; und Autovervollständigung für das Interface, welches ich dokumentiert (phpDoc, Zend Studio) habe.</p>
<p>Ich hoffe, ich habe es etwas anschaulicher erklärt, als es das Handbuch tut. Ich erinnere nocheinmal daran, dass dies keineswegs einfach ist und ich selbst lange gebraucht habe es zu verstehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2008/12/09/php5-oop-interfaces/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>OOP (Objekt orientierte Programmierung) PHP</title>
		<link>http://ugamela-blog.pheelgood.net/2008/09/17/oop-objekt-orientierte-programmierung-php/</link>
		<comments>http://ugamela-blog.pheelgood.net/2008/09/17/oop-objekt-orientierte-programmierung-php/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 12:03:14 +0000</pubDate>
		<dc:creator>Phoscur</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Phlame Engine]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ugamela-blog.pheelgood.net/?p=73</guid>
		<description><![CDATA[Seit PHP4 ist es möglich PHP OO zu programmieren. Mit PHP5 wurde das stark ausgebaut, aber bisher habe ich noch kein OS (Open Source) Projekt gesehn, in dem das wirklich verwendet wird, dabei ist das doch nun schon älter&#8230; PHP geht schon in Richtung PHP6&#8230; Ich habe mich sofort für OOP begeistern können, als ich [...]]]></description>
			<content:encoded><![CDATA[<p>Seit PHP4 ist es möglich PHP OO zu programmieren. Mit PHP5 wurde das stark ausgebaut, aber bisher habe ich noch kein OS (Open Source) Projekt gesehn, in dem das wirklich verwendet wird, dabei ist das doch nun schon älter&#8230; PHP geht schon in Richtung PHP6&#8230;</p>
<p>Ich habe mich sofort für OOP begeistern können, als ich es kennenlernte, auch wenn mir das nicht leichter fällt als prozedural (das ist der andere PHP Stil den quasi alle praktizieren) zu programmieren.</p>
<p>Yeah, PHP OOP ist supertoll, das muss ich ab jetzt umbedingt immer verwenden!<br />
→ Nein! Man muss eindeutig abwiegen, ob man etwas OO programmiert, den bei PHP geht dabei Performance verloren, denn das kompliieren dauert länger.</p>
<p>Zum Preis von einem bischen Performance bekommt man dafür:</p>
<ul>
<li>Übersichtlichkeit / Lesbarkeit</li>
<li>Darstellung von abstrakten und realen Dingen</li>
<li>Erweiterbarkeit</li>
<li>Wiederverwendbarkeit</li>
<li>Kapselung</li>
<li>und somit Effizienz</li>
</ul>
<p>Und diese Liste ist noch lang nicht vollständig.</p>
<p>Das hat mich letztlich überzeugt. Ich bin dabei das Herzstück (&#8220;Phlame Engine&#8221;) für UGamela in OOP zu schreiben. Dabei werde ich zum Beispiel Planeten und Flotten in Models abbilden. Das Ergebnis gibt den Moddern, die hoffentlich angespornt sind und viele Ideen haben, einfache Möglichkeiten mit den Daten umzugehen, wahrscheinlich ohne selbst Ahnung von MySQL oder Sessions zu haben.</p>
<p>Ihr könnt ich somit schon auf die PHP OOP Pfeilchen &#8220;-&gt;&#8221; freuen xD</p>
]]></content:encoded>
			<wfw:commentRss>http://ugamela-blog.pheelgood.net/2008/09/17/oop-objekt-orientierte-programmierung-php/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

