<?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/"
	>

<channel>
	<title>Besser PHP programmieren</title>
	<atom:link href="http://www.besser-php-programmieren.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.besser-php-programmieren.de</link>
	<description>Das Blog zum Buch</description>
	<pubDate>Thu, 03 Nov 2011 09:46:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>noch mehr Fehler(chen) auf den Seiten 256, 258/259, 265, 268, 278 und 408</title>
		<link>http://www.besser-php-programmieren.de/2010/06/noch-mehr-fehlerchen-auf-den-seiten-256-258259-265-268-278-und-408/</link>
		<comments>http://www.besser-php-programmieren.de/2010/06/noch-mehr-fehlerchen-auf-den-seiten-256-258259-265-268-278-und-408/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 09:47:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Fehler in der dritten Auflage]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=96</guid>
		<description><![CDATA[In den letzten Tagen hat Christoph Krebs fleißig weiter gelesen und noch ein paar kleinere Fehler im Text gefunden. Vielen Dank Christoph!
Seite 256:
Auf Seite 256 findet sich diese Zeile bei der natürlich ein &#8220;s&#8221; in &#8220;Klas(s)en&#8221; fehlt: &#8220;[...] gibt es einige Klasen im PEAR-Framework […]&#8221;
Seite 258/259:
In der Auflistung auf Seite 258 nennt sich ein Verzeichnis [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten Tagen hat Christoph Krebs fleißig weiter gelesen und noch ein paar kleinere Fehler im Text gefunden. Vielen Dank Christoph!</p>
<p><strong>Seite 256:</strong><br />
Auf Seite 256 findet sich diese Zeile bei der natürlich ein &#8220;s&#8221; in &#8220;Klas(s)en&#8221; fehlt: &#8220;[...] gibt es einige Klasen im PEAR-Framework […]&#8221;</p>
<p><strong>Seite 258/259:</strong><br />
In der Auflistung auf Seite 258 nennt sich ein Verzeichnis in der Auflistung &#8220;configs&#8221;, auf Seite 259 gibt es einen Ordner &#8220;config&#8221;. Dort fehlt leider ein &#8220;s&#8221; am Ende. Korrekt wäre auch hier &#8220;configs&#8221;</p>
<p><strong>Seite 265:</strong><br />
Auf Seite 265 fehlt bei dem {$name|spacify:&#8221;&#038;nbsp&#8221;} natürlich ein Semikolon nach dem &#038;nbsp. Korrekt wäre also {$name|spacify:&#8221;&amp;nbsp;&#8221;}</p>
<p><strong>Seite 268:</strong><br />
Hier ist einiges schief gelaufen&#8230; Als Beispiel für den Modifikator date_format finden sich dort die folgenden Zeilen:</p>
<p><strong>PHP-Datei</strong><br />
$smarty=new MySmarty;<br />
$smarty->display(&#8217;template.tpl&#8217;);</p>
<p><strong>template.tpl</strong><br />
{$smarty.now|date_format:&#8221;}</p>
<p><strong>Ausgabe</strong><br />
Hallo Welt</p>
<p>Zuerst fehlt nach dem date_format zuerst mal die Formatangabe wie das Datum formatiert werden soll. Das heißt nach dem date_format müsste eine Angabe wie z.B. &#8220;%d.%m.%Y&#8221; um das Datum eines Tages auszugeben. Die Ausgabe lautet dann natürlich auch nicht &#8220;Hallo Welt&#8221; sondern beispielsweise &#8220;15.01.1999&#8243;.</p>
<p><strong>Seite 278:</strong><br />
Auf Seite 278 findet sich die Zeile </p>
<pre>Wie gesagt sind die Funktionsweise von {section} und foreach} recht ähnlich,</pre>
<p> am Anfang des dritten Absatzes. Heir fehlt eine geschweifte Klammer vor dem foreach}.</p>
<p><strong>Seite 408:</strong><br />
In der zweiten Zeile des vorletzten Absatzes fehlt ein &#8220;zu erkennen&#8221;. Der Satz &#8220;Sie müssen dem JavaScript-DOM-Ausdruck nur ein dom= voranstellen, und schon ist Selenium in der Lage, dass es sich um DOM handelt.&#8221; müsste natürlich so lauten: &#8220;Sie müssen dem JavaScript-DOM-Ausdruck nur ein dom= voranstellen, und schon ist Selenium in der Lage zu erkennen, dass es sich um DOM handelt.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2010/06/noch-mehr-fehlerchen-auf-den-seiten-256-258259-265-268-278-und-408/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ein paar Fehler auf den Seiten 46, 88, 97, 117, 120, 129, 191 und 222</title>
		<link>http://www.besser-php-programmieren.de/2010/06/ein-paar-fehler-auf-den-seiten-46-88-97-117-120-129-191-und-222/</link>
		<comments>http://www.besser-php-programmieren.de/2010/06/ein-paar-fehler-auf-den-seiten-46-88-97-117-120-129-191-und-222/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 14:48:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Fehler in der dritten Auflage]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=93</guid>
		<description><![CDATA[Christoph Krebs ist ein Mensch der Bücher erschreckend genau lesen kann. Die Fehler die er gefunden hat haben mich wirklich beeindruckt, muss ich zugeben. Freundlicherweise hat er mir eine Mail mit seinen Funden geschickt, sodass ich sie an Euch weitergeben und in der nächsten Auflage korrigieren kann. Vielen Dank Christoph!
Hier seine Funde:
Das Beispiel auf Seite [...]]]></description>
			<content:encoded><![CDATA[<p>Christoph Krebs ist ein Mensch der Bücher erschreckend genau lesen kann. Die Fehler die er gefunden hat haben mich wirklich beeindruckt, muss ich zugeben. Freundlicherweise hat er mir eine Mail mit seinen Funden geschickt, sodass ich sie an Euch weitergeben und in der nächsten Auflage korrigieren kann. Vielen Dank Christoph!</p>
<p>Hier seine Funde:</p>
<p>Das Beispiel auf Seite 46 soll diese Ausgabe generieren:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #009900;">&#91;</span><span style="color:#800080;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span>
 int<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#91;</span>…<span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Korrekt wäre aber diese Ausgabe:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #009900;">&#91;</span><span style="color:#800080;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span>
 int<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#91;</span>…<span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Auf Seite 88 findet sich diese Zeile</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span> <span style="color: #339933;">===</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$zeile</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$erg</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>die so natürlich keinen Sinn ergibt. Im schlimmsten Fall könnte sie sogar zu einer Endlosschleife führen. Richtig wäre hier ein Ungleich:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span> <span style="color: #339933;">!==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$zeile</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$erg</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>Auf Seite 97 ist in dem Satz</p>
<pre>"Das heißt, hier ist sind die Abfrage und der […]"</pre>
<p>ein &#8220;ist zu viel enthalten</p>
<p>Auf Seite 117 findet sich diese Fehlermeldung:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #990000;">die</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Falscher Aufruf: Parameter 3 und 4 müssen Integer-Werte sein&quot;</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>Leider handelt es sich aber nicht um die Parameter 3 und 4 sondern um die Parameter 2 und 3.</p>
<p>Auf Seite 120 fehlt in dieser Zeile ein s da die Variable natürlich $sql  heißen müsste:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000088;">$erg</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ql</span><span style="color: #339933;">,</span> <span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>Auf Seite 129 habe ich einen Fehler in einen Kommentar eingebaut. Der Kommentar in der Klasse ShoppingCart sollte nicht</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Deklaration der Eigenschaften</span></pre></div></div>

<p>sondern</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Deklaration der Methoden</span></pre></div></div>

<p>heißen</p>
<p>Auf Seite 191 unten steht
<pre>"Die Methode bindet dann eine Klassendatei mit dem Namen db_mysql.php ein, […]"</pre>
<p> was natürlich nicht korrekt ist. Die Namen der Dateien die eingebunden werden haben noch ein &#8220;class&#8221; in der Mitte, sodass der Dateiname &#8220;db_mysql.class.php&#8221; lautet.</p>
<p>Auf Seite 222 fehlt im vierten Absatz das Wort &#8220;die&#8221; in dem Satz &#8220;Sollte es das Verzeichnis mit der externen Bibliothek betreffen, dann schreiben Sie Meldung in ein Logfile.&#8221; </p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2010/06/ein-paar-fehler-auf-den-seiten-46-88-97-117-120-129-191-und-222/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fehler auf Seite 142</title>
		<link>http://www.besser-php-programmieren.de/2009/05/fehler-auf-seite-142/</link>
		<comments>http://www.besser-php-programmieren.de/2009/05/fehler-auf-seite-142/#comments</comments>
		<pubDate>Thu, 07 May 2009 10:52:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Fehler in der dritten Auflage]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=85</guid>
		<description><![CDATA[In der dritten Auflage habe ich auf Seite 142 bei dem Beispiel mit dem Setter für die Temperatur leider einen Fehler eingebaut.
Dort findet sich diese if-Abfrage:
if (0 > $neue_temp) 
Da ist das Größer-Als-Zeichen natürlich falsch. Ein Kleiner-Als-Zeichen wäre korrekt. Das heißt, die if-Abfrage müsste so lauten:
if (0 < $neue_temp) 
Vielen Dank an Martin Riedel, der [...]]]></description>
			<content:encoded><![CDATA[<p>In der dritten Auflage habe ich auf Seite 142 bei dem Beispiel mit dem Setter für die Temperatur leider einen Fehler eingebaut.<br />
Dort findet sich diese if-Abfrage:<br />
<code>if (0 > $neue_temp) </code><br />
Da ist das Größer-Als-Zeichen natürlich falsch. Ein Kleiner-Als-Zeichen wäre korrekt. Das heißt, die if-Abfrage müsste so lauten:<br />
<code>if (0 < $neue_temp) </code><br />
Vielen Dank an Martin Riedel, der den Fehler gefunden und mich darauf hingewiesen hat. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2009/05/fehler-auf-seite-142/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fehler auf den Seiten 763, 768 und 808 (3. Auflage)</title>
		<link>http://www.besser-php-programmieren.de/2009/05/fehler-auf-den-seiten-763-768-und-808-3-auflage/</link>
		<comments>http://www.besser-php-programmieren.de/2009/05/fehler-auf-den-seiten-763-768-und-808-3-auflage/#comments</comments>
		<pubDate>Tue, 05 May 2009 09:05:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Fehler in der dritten Auflage]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=70</guid>
		<description><![CDATA[Am 17.04.09 hat Timo Furrer mir eine Mail geschrieben, in der er mir mitteilte, dass er einige Fehler gefunden hat, die sonst noch niemand entdeckt hatte (zumindest niemand der mir geschrieben hat  ).
Das erste Problem findet sich auf Seite 763, bzw. beginnt es da. Hier wird die Normalisierung von Tabellen erläutert. Bei der Normalisierung [...]]]></description>
			<content:encoded><![CDATA[<p>Am 17.04.09 hat Timo Furrer mir eine Mail geschrieben, in der er mir mitteilte, dass er einige Fehler gefunden hat, die sonst noch niemand entdeckt hatte (zumindest niemand der mir geschrieben hat <img src='http://www.besser-php-programmieren.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).</p>
<p>Das erste Problem findet sich auf Seite 763, bzw. beginnt es da. Hier wird die Normalisierung von Tabellen erläutert. Bei der Normalisierung hat sich dann aber leider ein kleiner Fehler eingeschlichen. Die ursprüngliche Tabelle, die normalisiert werden soll lautet so:</p>
<table border='1' cellspacing='0' cellpadding='10' width='100%' style='font-size:12px'>
<tr bgcolor='#333333'>
<td>ID</td>
<td>Name</td>
<td>Strasse</td>
<td>Ort</td>
<td>Kinder</td>
</tr>
<tr>
<td valign='top'>1</td>
<td valign='top'>Meiser</td>
<td valign='top'>Am Wühlwasser 12</td>
<td valign='top'>33125 Paderborn</td>
<td valign='top'>Gerd 12<br />Hans 13</td>
</tr>
<tr>
<td valign='top'>2</td>
<td valign='top'>Müller</td>
<td valign='top'>Gottesberg 1</td>
<td valign='top'>33119 Paderborn</td>
<td valign='top'>Paula 17 <br />Josy 12</td>
</tr>
<tr>
<td valign='top'>3</td>
<td valign='top'>Görgens</td>
<td valign='top'>Willemstraße 14</td>
<td valign='top'>22104 Hamburg</td>
<td></td>
</tr>
</table>
<p>Bei den folgenden Tabellen heißt das älteste Kind von Herrn oder Frau Müller dann aber nicht mehr Paula sondern Gerd, was natürlich falsch ist. Davon sind die Tabellen 9.41, 9.43 und 9.46 betroffen. </p>
<p>Auf Seite 768 füge ich Daten in die Tabelle <code>aenderungen</code> ein und schreibe dann, dass die Spalte <code>aenderungen</code> automatisch ergänzt wird. Die Spalte heißt aber nicht <code>aenderungen</code>  sondern nur <code>aenderung</code>.</p>
<p> Auch auf Seite 808 findet sich ein Fehler im Text. In der ersten Zeile auf der Seite steht &#8220;Um sowohl bei einem <code>UPDATE</code> als auch bei einem <code>BACKUP</code> einen Backup&#8230;&#8221;. Korrekt wäre hier allerdings &#8220;Um sowohl bei einem <code>UPDATE</code> als auch bei einem <code>DELETE</code> einen Backup&#8230;&#8221;</p>
<p>Vielen Dank an Timo Furrer</p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2009/05/fehler-auf-den-seiten-763-768-und-808-3-auflage/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fehler auf Seite 603</title>
		<link>http://www.besser-php-programmieren.de/2009/03/fehler-auf-seite-603/</link>
		<comments>http://www.besser-php-programmieren.de/2009/03/fehler-auf-seite-603/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 09:58:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Fehler in der dritten Auflage]]></category>

		<category><![CDATA[Fehler]]></category>

		<category><![CDATA[session_start]]></category>

		<category><![CDATA[start_session]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=64</guid>
		<description><![CDATA[Gestern erreichte mich eine E-Mail in der Steven Lüttig mich freundlicherweise darauf hingewiesen hat, dass ich in der dritten Auflage auf Seite 603 einen Fehler eingebaut habe. In der vorletzten Zeile auf der Seite habe ich start_session() geschrieben. Korrekt wäre natürlich session_start(), wie ich es auch im Listing davor korrekt geschrieben habe.
Leider ist das Verwechseln [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern erreichte mich eine E-Mail in der Steven Lüttig mich freundlicherweise darauf hingewiesen hat, dass ich in der dritten Auflage auf Seite 603 einen Fehler eingebaut habe. In der vorletzten Zeile auf der Seite habe ich <code>start_session()</code> geschrieben. Korrekt wäre natürlich <code>session_start()</code>, wie ich es auch im Listing davor korrekt geschrieben habe.<br />
Leider ist das Verwechseln von <code>session_start()</code> und <code>start_session()</code> wirklich mein absoluter &#8220;Lieblingsfehler&#8221; bei der Arbeit mit PHP. Irgendwie schreibe ich das ständig falsch herum. Sorry for inconvenience&#8230;<br />
Oh, korrekterweise muss man sagen, dass der Fehler nicht nur die dritte Auflage sondern auch die erste und zweite Auflage betrifft. Der ist nämlich schon immer da. Leider habe ich gerade kein Exemplar der ersten Auflage da, aber in der zweiten Auflage ist der Fehler auf Seite 509 im dritten Absatz in der ersten Zeile.<br />
Vielen Dank an Steven Lüttig für den Hinweis auf den Fehler.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2009/03/fehler-auf-seite-603/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MySQL &#8220;FUNCTION does not exist&#8221;</title>
		<link>http://www.besser-php-programmieren.de/2009/02/mysql-function-does-not-exist/</link>
		<comments>http://www.besser-php-programmieren.de/2009/02/mysql-function-does-not-exist/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 11:27:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=57</guid>
		<description><![CDATA[Es gibt so Sachen die macht man unwissentlich immer richtig und wundert sich dann plötzlich dass nichts mehr geht wenn man es mal anders macht. Letzte Woche hatte ich wieder so einen Fall. Es handelte sich um ein recht banales SQL-Statement, das allerdings in einer unschönen Fehlermeldung resultierte&#8230;
Das eigentliche Statement war so eins wie dieses [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt so Sachen die macht man unwissentlich immer richtig und wundert sich dann plötzlich dass nichts mehr geht wenn man es mal anders macht. Letzte Woche hatte ich wieder so einen Fall. Es handelte sich um ein recht banales SQL-Statement, das allerdings in einer unschönen Fehlermeldung resultierte&#8230;</p>
<p>Das eigentliche Statement war so eins wie dieses hier:</p>

<div class="wp_syntax"><div class="code"><pre class="sql sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> blog <span style="color: #993333; font-weight: bold;">WHERE</span> datum <span style="color: #66cc66;">&gt;</span> now<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Zumindest hätte es das sein sollen. Allerdings hatte ich ein Leerzeichen nach dem <code>now</code> getippt, sodass sich ein solches Statement ergab:</p>

<div class="wp_syntax"><div class="code"><pre class="sql sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> blog <span style="color: #993333; font-weight: bold;">WHERE</span> datum <span style="color: #66cc66;">&gt;</span> now <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Durch das Leerzeichen ist MySQL leider nicht mehr in der Lage das <code>now()</code> zu erkennen. Daher liefert MySQL nur einen Fehler wie diesen zurück:<br />
<code>ERROR 1305 (42000): FUNCTION test.now does not exist </code></p>
<p>Dieses Beispiel liefert übrigens auf MySQL 5.0 und 5.1 einen Fehler.<br />
Interessant ist allerdings, dass das Statement das ich genutzt habe auf dem Entwicklungsserver funktionierte, das Live-System aber eine Fehlermeldung lieferte. MySQL 5.1 (Entwicklungsserver) scheint da (zumindest bei einigen Funktionen) nicht ganz so streng zu sein wie MySQL 5.0, das auf dem Live-System genutzt wird. Das kann man an diesem Beispiel ganz schön sehen. Was mit MySQL 5.1 funktioniert:</p>

<div class="wp_syntax"><div class="code"><pre class="sql sql" style="font-family:monospace;">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> version<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">-------------+</span>
| version<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>   |
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">-------------+</span>
| 5<span style="color: #66cc66;">.</span>1<span style="color: #66cc66;">.</span>16<span style="color: #66cc66;">-</span>beta | 
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">-------------+</span>
<span style="color: #cc66cc;">1</span> row <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #993333; font-weight: bold;">SET</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0.00</span> sec<span style="color: #66cc66;">&#41;</span>
&nbsp;
mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> date_format <span style="color: #66cc66;">&#40;</span>now<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'%d.%m.%Y'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">---------------------------------+</span>
| date_format <span style="color: #66cc66;">&#40;</span>now<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'%d.%m.%Y'</span><span style="color: #66cc66;">&#41;</span> |
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">---------------------------------+</span>
| 17<span style="color: #66cc66;">.</span>02<span style="color: #66cc66;">.</span>2009                      | 
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">---------------------------------+</span>
<span style="color: #cc66cc;">1</span> row <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #993333; font-weight: bold;">SET</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0.00</span> sec<span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>liefert in MySQL 5.0 nur einen Fehler:</p>

<div class="wp_syntax"><div class="code"><pre class="sql sql" style="font-family:monospace;">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> version<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">--------------------+</span>
| version<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>          |
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">--------------------+</span>
| 5<span style="color: #66cc66;">.</span>0<span style="color: #66cc66;">.</span>51a<span style="color: #66cc66;">-</span>3ubuntu5<span style="color: #66cc66;">.</span>4 | 
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">--------------------+</span>
<span style="color: #cc66cc;">1</span> row <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #993333; font-weight: bold;">SET</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0.00</span> sec<span style="color: #66cc66;">&#41;</span>
&nbsp;
mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> date_format <span style="color: #66cc66;">&#40;</span>now<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'%d.%m.%Y'</span><span style="color: #66cc66;">&#41;</span>;
ERROR <span style="color: #cc66cc;">1305</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">42000</span><span style="color: #66cc66;">&#41;</span>: <span style="color: #993333; font-weight: bold;">FUNCTION</span> test<span style="color: #66cc66;">.</span>date_format does <span style="color: #993333; font-weight: bold;">NOT</span> exist</pre></div></div>

<p>Also immer schön darauf achten, dass vor dem Klammerpaar kein Leerzeichen steht, dann hat man auch kein Problem <img src='http://www.besser-php-programmieren.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2009/02/mysql-function-does-not-exist/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Die Sache mit dem instanceof</title>
		<link>http://www.besser-php-programmieren.de/2009/01/die-sache-mit-dem-instanceof/</link>
		<comments>http://www.besser-php-programmieren.de/2009/01/die-sache-mit-dem-instanceof/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 08:20:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Fehler in der dritten Auflage]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=52</guid>
		<description><![CDATA[Auch auf Seite 118 (Kapitel 4.2.1) hat sich leider noch ein Fehler eingeschlichen. Und zwar prüfe ich hier mithilfe des Operators instanceof ob $obj eine Instanz der Klasse 'klasse' ist. Ungefähr auf der Mitte der Seite findet sich diese Zeile:

if &#40;$obj instanceof 'klasse'&#41;

Das ist leider nicht korrekt. Der Name der Klasse darf bei der Nutzung [...]]]></description>
			<content:encoded><![CDATA[<p>Auch auf Seite 118 (Kapitel 4.2.1) hat sich leider noch ein Fehler eingeschlichen. Und zwar prüfe ich hier mithilfe des Operators <code>instanceof</code> ob <code>$obj</code> eine Instanz der Klasse <code>'klasse'</code> ist. Ungefähr auf der Mitte der Seite findet sich diese Zeile:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$obj</span> instanceof <span style="">'klasse'</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Das ist leider nicht korrekt. Der Name der Klasse darf bei der Nutzung <code>instanceof</code> nicht in Anführungszeichen (Gänsefüßchen, Hochkommas etc.) gesetzt werden. Nutzt man die Zeile so wie Sie im Buch steht, dann quittiert PHP das mit dieser Meldung:</p>
<pre>
...syntax error, unexpected T_CONSTANT_ENCAPSED_STRING,
   expecting T_STRING or T_VARIABLE or '$' in...
</pre>
<p>Die Zeile müsste also eigentlich so lauten:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$obj</span> instanceof klasse<span style="color: #009900;">&#41;</span></pre></div></div>

<p>Vielen Dank an Ralf Oltmanns, der diesen Fehler gefunden und sich bei mir gemeldet hat.<br />
[edit] Fehler korrigiert die Marko gefunden hatte. Vielen Dank für den Hinweis, Marko <img src='http://www.besser-php-programmieren.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2009/01/die-sache-mit-dem-instanceof/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Vorträge, Barcamps und anderes</title>
		<link>http://www.besser-php-programmieren.de/2009/01/vortrage-barcamps-und-anderes/</link>
		<comments>http://www.besser-php-programmieren.de/2009/01/vortrage-barcamps-und-anderes/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 10:37:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Ergänzungen zur dritten Auflage]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=43</guid>
		<description><![CDATA[Gestern bekam ich eine Mail in der ein Leser fragte wie man denn an solchen Vorträgen teilnehmen kann wie sie auf der DVD zum Buch enthalten sind. Daher wollte ich da noch ein paar Dinge zu anmerken. 
Multimediatreff
Die Vorträge die auf der DVD enthalten sind, sind auf einem Multimediatreff in Köln entstanden. Der Multimediatreff ist [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern bekam ich eine Mail in der ein Leser fragte wie man denn an solchen Vorträgen teilnehmen kann wie sie auf der DVD zum Buch enthalten sind. Daher wollte ich da noch ein paar Dinge zu anmerken. </p>
<p><h3>Multimediatreff</h3>
<p>Die Vorträge die auf der DVD enthalten sind, sind auf einem Multimediatreff in Köln entstanden. Der Multimediatreff ist eine kostengünstige Veranstaltung, die mehrmals im Jahr stattfindet. Üblicherweise sind die Referenten wirklich sehr gut und auch die Verpflegung ist vortrefflich. dazu kommt noch, dass man da viele spannende Menschen treffen kann. Weitere Informationen dazu gibt&#8217;s hier: <a href="http://www.multimediatreff.de"  target='_blank'>http://www.multimediatreff.de</a>
</p>
<p><h3>Barcamps und Unkonferenzen</h3>
<p>Eine weitere tolle Sachen wenn man spannende Menschen kennenlernen und etwas lernen möchte sind Barcamps. Bei Barcamps handelt es sich um &#8220;kostenlose Konferenzen&#8221;. Das heißt, ein Haufen Menschen der Interesse an einem Thema hat trifft sich irgendwo in Deutschland (meist für ein ganzes Wochenende) und jeder der möchte kann einen Vortrag halten. Die Qualität der Vorträge ist dabei meist ein wenig unterschiedlich aber die Veranstaltungen lohnen sich auf jeden Fall. Informationen zu Barcamps gibt es bei Wikipedia <a href="http://de.wikipedia.org/wiki/BarCamp"  target='_blank'>http://de.wikipedia.org/wiki/BarCamp</a> und die Frage wo das nächste Barcamp stattfindet kann man mithilfe von <a href="http://www.barcamp.org"  target='_blank'>http://www.barcamp.org</a> klären.<br />
Barcamps sind eigentlich eine &#8220;Unconference&#8221;. Eine Unconference hat eigentlich dieselbe Idee nur einen anderen Namen. Auch da gibt es viele spannende Veranstaltungen. Meist sind Unconferences aber ein wenig spezieller und das Niveau ist höher als bei einem normalen Barcamp. Lohnenswert sind besonders die PHP Unconference (<a href="http://www.php-unconference.de/" target='_blank'>http://www.php-unconference.de</a>)
</p>
<p><h3>Usergroups, Webmontage &#038; Co.</h3>
<p>In den meisten größeren Städten gibt es auch noch Usergroups zu allen möglichen Themen. Bei einer Usergroup handelt es sich um einen Haufen Leute die sich meist ein Mal pro Monat treffen und sich zu einem bestimmten Thema austauschen. Zugegebenermaßen ist der &#8220;Haufen&#8221; meist nicht ganz so groß (hier und da sind auch schon zwei Leute eine Usergroup) aber auch diese Treffen können sich lohnen. Ob bei solchen Treffen Vorträge gehalten werden oder ob man nur ein Bier zusammen trinkt variiert immer ein wenig.<br />
In vielen Städten gibt es auch noch Webmontage. Die Idee ist dabei ähnlich wie  bei einer Usergroup nur dass man sich etwas allgemeiner über das Thema Internet unterhält. Allerdings ist es meist so, dass auf den Webmontagen mehr Vorträge gehalten werden.<br />
Teilweise finden sich auch noch lokale Gruppen des CCC oder anderer Vereine. Einfach mal nach Webmontagen, Usergroups etc. googlen.
</p>
<p><h3>Auf dem Laufenden bleiben&#8230;</h3>
<p>Bei der Vielzahl der Veranstaltungen und der Dynamik der Szene ist es immer ein wenig schwierig auf dem Laufenden zu bleiben was gerade wo stattfindet. Daher kann ich nur empfehlen, wenn man das ein oder andere Blog liest. Einige der bekannten PHPler sind auf vielen Konferenzen / Veranstaltungen zu finden und das dokumentieren sie  dann auch meist im eigenen Blog. Also immer fleißig Blogs lesen <img src='http://www.besser-php-programmieren.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
</p>
<p>Bestimmt habe ich hier noch ein paar Veranstaltunge vergessen (z.B. die FrOSCon oder das PHP Vikinger) aber ich glaube wenn man die ganzen Sachen die ich hier genannt habe mitnimmt, dann hat man schon eine ganze Menge zu tun <img src='http://www.besser-php-programmieren.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2009/01/vortrage-barcamps-und-anderes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Konstruktor(en) falsch benannt</title>
		<link>http://www.besser-php-programmieren.de/2009/01/konstruktoren-falsch-benannt/</link>
		<comments>http://www.besser-php-programmieren.de/2009/01/konstruktoren-falsch-benannt/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 19:20:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Fehler in der dritten Auflage]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=14</guid>
		<description><![CDATA[In der dritten Auflage von &#8220;Besser PHP programmieren&#8221; ist auf den Seiten 137 und 138 ein gewisses Durcheinander mit den Konstruktoren entstanden. Der Hintergrund ist, dass PHP 4 noch vorgesehen hat, dass der Konstruktor eine Methode ist welche denselben Namen hat wie die Klasse. In PHP 5 funktioniert das zwar auch noch aber ein Konstruktor [...]]]></description>
			<content:encoded><![CDATA[<p>In der dritten Auflage von &#8220;Besser PHP programmieren&#8221; ist auf den Seiten 137 und 138 ein gewisses Durcheinander mit den Konstruktoren entstanden. Der Hintergrund ist, dass PHP 4 noch vorgesehen hat, dass der Konstruktor eine Methode ist welche denselben Namen hat wie die Klasse. In PHP 5 funktioniert das zwar auch noch aber ein Konstruktor sollte in PHP 5 den Namen <code>__construct()</code> haben.</p>
<p>Die vorhergehenden Auflagen von &#8220;Besser PHP programmieren&#8221; bezogen sich noch auf PHP 4. Bei der Übernahme der Texte für die neue Auflage habe ich auf den Seiten 137 und 138 leider ein paar Sachen mit den Namen der Konstruktoren durcheinander gebracht.</p>
<p>In Listing 4.5 sollte der Konstruktor den Namen <code>__construct()</code> haben und nicht <code>kunde()</code>. Zwar wäre es nicht unbedingt falsch den Konstruktor <code>kunde()</code> zu nennen aber es ist halt PHP 4 und nicht 5. Hier nochmal das Listing 4.5 in einer korrekten Version:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Kunde <span style="color: #000000; font-weight: bold;">extends</span> Kontakt
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$anrede</span>; <span style="color: #666666; font-style: italic;">// die zusätzlichen Eigenschaften</span>
   <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$email</span>;
   <span style="color: #000000; font-weight: bold;">function</span> __construct <span style="color: #009900;">&#40;</span><span style="color: #000088;">$anrede</span><span style="color: #339933;">,</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span><span style="color: #000088;">$telefon</span><span style="color: #339933;">,</span><span style="color: #000088;">$email</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// Konstruktor</span>
   <span style="color: #009900;">&#123;</span>
      parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span><span style="color: #000088;">$telefon</span><span style="color: #009900;">&#41;</span>; <span style="color: #666666; font-style: italic;">// Konstruktor der Basisklasse aufrufen</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">anrede</span><span style="color: #339933;">=</span><span style="color: #000088;">$anrede</span>; <span style="color: #666666; font-style: italic;">// neue Eigenschaften zuweisen</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">=</span><span style="color: #000088;">$email</span>;
   <span style="color: #009900;">&#125;</span>
   <span style="color: #000000; font-weight: bold;">function</span> zeigeAn<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// zeigt alle Daten an</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;Anrede: $this-&gt;anrede &lt;br /&gt;&quot;</span>; <span style="color: #666666; font-style: italic;">// Anrede ausgeben</span>
      parent<span style="color: #339933;">::</span><span style="color: #004000;">zeigeAn</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>; <span style="color: #666666; font-style: italic;">// zeigeAn aus der Basisklasse aufrufen</span>
      <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;&lt;br /&gt;E-Mail: $this-&gt;email&quot;</span>; <span style="color: #666666; font-style: italic;">// E-Mail ausgeben</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Des Weiteren findet sich in der Erläuterung des Konstruktors auf Seite 138 diese Zeile:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;">parent<span style="color: #339933;">::</span><span style="color: #004000;">kontakt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$telefon</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>Das ist natürlich falsch. Im Code, in Listing 4.5, ist die Zeile korrekt. Das heißt, hier müsste eigentlich</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;">parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$telefon</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>stehen&#8230;</p>
<p>Leider hat die Fehler niemand bemerkt bevor das Buch in Druck gegangen ist. Eigentlich ist es ja immer wieder erstaunlich, dass niemand einen solchen Fehler bemerkt. Ich selbst habe den Text geschrieben und mehrfach gelesen. Dann haben ihn noch der Gutachter, der Lektor und die Korrektorin gelesen aber niemandem ist das aufgefallen. Vielen Dank an José Stiller der diesen Fehler gefunden und mir eine Mail geschrieben hat.</p>
<p>Weitere Informationen zu Konstruktoren in PHP 4 und 5 gibt es <a href="http://www.besser-php-programmieren.de/2009/01/konstruktoren-in-php-4-und-5/">hier</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2009/01/konstruktoren-falsch-benannt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Konstruktoren in PHP 4 und 5</title>
		<link>http://www.besser-php-programmieren.de/2009/01/konstruktoren-in-php-4-und-5/</link>
		<comments>http://www.besser-php-programmieren.de/2009/01/konstruktoren-in-php-4-und-5/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 19:19:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Tipps und Tricks zu PHP]]></category>

		<guid isPermaLink="false">http://www.besser-php-programmieren.de/?p=21</guid>
		<description><![CDATA[Eine der Änderungen die sich von PHP 4 nach PHP 5 ergab war, dass die Konstruktoren von Klassen anders zu benennen sind. Der Konstruktor, also die Methode die automatisch ausgeführt wird, wenn eine Klasse instanziiert wird, musste in PHP 4 denselben Namen haben wir die Klasse selbst. In PHP 5 ist der Konstruktor aber anders [...]]]></description>
			<content:encoded><![CDATA[<p>Eine der Änderungen die sich von PHP 4 nach PHP 5 ergab war, dass die Konstruktoren von Klassen anders zu benennen sind. Der Konstruktor, also die Methode die automatisch ausgeführt wird, wenn eine Klasse instanziiert wird, musste in PHP 4 denselben Namen haben wir die Klasse selbst. In PHP 5 ist der Konstruktor aber anders zu bennen. Die Methode muss den Namen <code>__construct()</code> haben. Eine Klasse foo müsste in PHP 4 also so aussehen:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> foo
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">function</span> foo <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;Ich bin der Konstruktor&quot;</span>;
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>die PHP 5 Variante sieht so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> foo
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;Ich bin der Konstruktor&quot;</span>;
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>In beiden Varianten würde der Text <em>Ich bin der Konstruktor</em> ausgegeben, wenn ein neues Objekt der Klasse instanziiert wird. Die PHP 4-Variante kann übrigens auch mit PHP 5 ausgeführt werden. Um eine bessere Abwärtskompatibilität zu gewährleisten kann PHP 5 also mit Konstruktoren in beiden Varianten umgehen.</p>
<p>Jetzt stellt sich aber die interessante Frage wie eine Klasse sich verhält, wenn Konstruktoren in beiden Varianten da sind. Würde die Klasse mit PHP 4 ausgeführt, dann ist das (vielleicht) kein Problem, da PHP 4 den Konstruktor <code>__construct()</code> nicht kennt. Allerdings dürfte die Methode <code>__construct()</code> dann nicht als <code>public function __construct()</code> deklariert werden, sondern nur als <code>function __construct()</code>, da PHP 4 dieses Schlüsselwort och nicht kennt. Aber was passiert mit PHP 5? Wird ein Objekt dieser Klasse instanziiert, dann wird nur die PHP 5 Variante ausgeführt:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> foo
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> foo <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;Ich bin der PHP 4 Konstruktor&quot;</span>;
   <span style="color: #009900;">&#125;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;Ich bin der PHP 5 Konstruktor&quot;</span>;
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Das heißt, es wird nur der Text <em>Ich bin der PHP 5 Konstruktor</em> ausgegeben. War eigentlich zu erwarten, oder? Interessant wird es aber, wenn die beiden Varianten gemischt werden, beipsielsweise enn die eine Klasse ein Elter ist und die andere Klasse abgeleitet ist. Diese Variante führt zu einem Fatal Error:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> foo
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;Ich bin der PHP 5 Konstruktor&quot;</span>;
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> bar <span style="color: #000000; font-weight: bold;">extends</span> foo 
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> bar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">foo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">new</span> bar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>Logisch, die Methode <code>foo()</code> ist in der Superklasse ja auch nicht deklariert. Diese Version funktioniert insteressanterweise aber:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> foo
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;Ich bin der PHP 4 Konstruktor&quot;</span>;
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> bar <span style="color: #000000; font-weight: bold;">extends</span> foo 
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> bar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">new</span> bar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>Kurios, wie ich finde. Aber so ist PHP halt <img src='http://www.besser-php-programmieren.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.besser-php-programmieren.de/2009/01/konstruktoren-in-php-4-und-5/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

