<?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>Webmasterplein Blogt &#187; Scripten</title>
	<atom:link href="http://webmasterplein.net/blog/category/algemeen/scripten/feed/" rel="self" type="application/rss+xml" />
	<link>http://webmasterplein.net/blog</link>
	<description>met passie voor het web</description>
	<lastBuildDate>Sat, 10 Apr 2010 12:41:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHP OOP &#8211; We extenden onze kennis!</title>
		<link>http://webmasterplein.net/blog/2008/12/php-oop-we-extenden-onze-kennis/</link>
		<comments>http://webmasterplein.net/blog/2008/12/php-oop-we-extenden-onze-kennis/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 18:06:25 +0000</pubDate>
		<dc:creator>Libia</dc:creator>
				<category><![CDATA[Scripten]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[extend]]></category>
		<category><![CDATA[klasse]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=149</guid>
		<description><![CDATA[Ik hoop dat je genoten hebt van <a href="http://webmasterplein.net/blog/2008/11/php-oop-wat-en-hoe/">m’n eerste deel</a> en dat je hier lekker mee hebt kunnen oefenen en experimenteren! Het is heel erg belangrijk dat je alle theorie uit dat eerste deel begrijpt en ook toe kunt passen!
Jan-Jaap heeft ook al het extends keyword <a href="http://webmasterplein.net/blog/2008/12/php-fouten-afhandelen-met-exceptions/">gebruikt</a>, dat ga ik in deze tutorial ook weer wat verder uitleggen.]]></description>
			<content:encoded><![CDATA[<p>Ik hoop dat je genoten hebt van <a href="http://webmasterplein.net/blog/2008/11/php-oop-wat-en-hoe/">m’n eerste deel</a> en dat je hier lekker mee hebt kunnen oefenen en experimenteren! Het is heel erg belangrijk dat je alle theorie uit dat eerste deel begrijpt en ook toe kunt passen!<br />
Jan-Jaap heeft ook al het extends keyword <a href="http://webmasterplein.net/blog/2008/12/php-fouten-afhandelen-met-exceptions/">gebruikt</a>, dat ga ik in deze tutorial ook weer wat verder uitleggen.</p>
<p><span id="more-149"></span></p>
<h2>Dus, Wat gaan we doen?</h2>
<p>Eigenlijk gaan we weer hetzelfde doen als in het vorige deel, we gaan weer een auto klasse maken. Maar elke auto is natuurlijk anders, dus maken we meerdere klassen. Dit lijkt omslachtig ja, maar dat is waar het extends keyword komt kijken!</p>
<h2>Eerst wat theorie.</h2>
<p>De definitie van een klasse kennen jullie nu natuurlijk al (anders moet je m’n eerste deel nog maar is lezen). Maar er komt nog een deel bij. Een klasse kan namelijk ook iets zijn dat een uitbreiding is van een andere klasse. Als dit het geval is, dan neemt een klasse alle methods en variabelen van de ouder-klasse over. Vervolgens kun je nieuwe methods toevoegen, variabelen toevoegen, methods veranderen en variabelen veranderen, behalve als er een bescherming op zit.</p>
<h3>Een bescherming?</h3>
<p>Ja een bescherming! Weet je nog dat we het hadden over private, protected en public? Je weet dat public was om een method of variabele vanuit de instantie te kunnen benaderen, maar wat is nou het verschil tussen private en protected. Een private method of variabele kan alleen worden gebruikt door de klasse waarin hij gedefinieerd is, een protected method of variabele kan ook worden gebruikt door een uitbreiding van de klasse/kinderklasse/extended klasse. Behalve als je echt niet wilt dat iets in een uitbreidingsklasse wordt gebruikt, raad ik je dus aan om altijd protected te gebruiken!</p>
<h2>Maak maar een auto dan!</h2>
<p>We gaan nu eerst weer de auto klasse terughalen, ik voeg hier ook een maximumsnelheid aan toe, ook heb ik alle echo’s verwijderd, omdat dat niet netjes is:</p>
<p><code>class Auto<br />
{<br />
public $merk = 'onbekend';<br />
public $kleur = 'onbekend';<br />
public $nummerbord = 'on-be-kend';<br />
protected $snelheid = 0;<br />
protected $maxSnelheid = 150; //sneller dan dit mag de auto niet gaan<br />
protected $lichten = false; //lichten standaard uit</code></p>
<p>public function __construct($merk, $kleur, $nummerbord)<br />
{<br />
$this-&gt;merk = $merk;<br />
$this-&gt;kleur = $kleur;<br />
$this-&gt;nummerbord = $nummerbord;<br />
$this-&gt;lichten = rand(0, 1);<br />
}</p>
<p>public function geefGas($snelheid = 5)<br />
{<br />
$this-&gt;snelheid += $snelheid; //Let op dat je hier niet in de war raakt!<br />
}</p>
<p>public function geefMinderGas($snelheid = 5)<br />
{<br />
$this-&gt;snelheid -= $snelheid; //natuurlijk kun je dit ook bereiken met de vorige method, bij een snelheid van -5 <img src='http://webmasterplein.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
}</p>
<p>public function kijkOpSnelheidsmeter()<br />
{<br />
return $this-&gt;snelheid;<br />
}</p>
<p>public function handrem()<br />
{<br />
$snelheid = $this-&gt;snelheid; //de oude snelheid bewaren<br />
$this-&gt;snelheid = 0;</p>
<p>$this-&gt;botsing($snelheid); //roep een andere method aan<br />
}</p>
<p>public function switchLichten()<br />
{<br />
$this-&gt;lichten = !$this-&gt;lichten;</p>
<p>return $this-&gt;lichten;<br />
}</p>
<p>private function botsing($beginsnelheid)<br />
{<br />
if(!rand(0, 9) || $beginsnelheid &gt; 100 || $beginsnelheid &lt; -100)<br />
{<br />
return true;<br />
}<br />
else<br />
{<br />
return false;<br />
}<br />
}<br />
}<br />
?&gt;</p>
<p>Nu wil ik een Ferrari die harder kan rijden en sneller optrekt, een Audi die minder snel kan rijden en geen lichten heeft en een bmw zonder handrem en met een kapotte snelheidsmeter. Dit kunnen we op twee manieren berijken:<br />
1. We maken voor elke auto een andere klasse, nadeel: kost erg veel ruimte! Voordeel: dat begrijpen we!<br />
2. We maken extend klassen van de Auto klasse waarmee we bepaalde dingen veranderen, nadeel: begrijpen we nog niet! Voordeel: lekker makkelijk/klein<br />
Natuurlijk kiezen we voor optie 2, we zijn lui! En geen zorgen, ik leg het wel uit!</p>
<h2>Aan de slag dan maar!</h2>
<p>Juist, we beginnen met de makkelijkste, de Ferrari! Eerst maken we de klasse en zeggen we dat de klasse Auto moet naapen:<br />
<code>class Ferrari extends Auto<br />
{<br />
}</code><br />
Eerst vertellen we dat hij harder mag rijden:<br />
<code>class Ferrari extends Auto<br />
{<br />
protected $maxSnelheid = 355;<br />
}</code><br />
Nu schrijven we de geefGas method opnieuw:</p>
<p><code>class Ferrari extends Auto<br />
{<br />
protected $maxSnelheid = 355;</code></p>
<p>public function geefGas($snelheid = 10) //door de 10 trekt de ferrari twee keer zo snel op!<br />
{<br />
$this-&gt;snelheid += $snelheid; //Let op dat je hier niet in de war raakt!<br />
if($this-&gt;snelheid &gt; $this-&gt;maxSnelheid)<br />
{<br />
$this-&gt;snelheid = $this-&gt;maxSnelheid;<br />
}<br />
}<br />
}</p>
<p>En dat is alles wat je nodig hebt om een nieuwe klasse te schrijven, alle andere methods en variabelen werken namelijk ook nogsteeds! Nu gaan we hetzelfde doen, maar dan voor de Audi!</p>
<p><code>class Audi extends Auto<br />
{<br />
protected $maxSnelheid = 76;</code></p>
<p>public function __construct($merk, $kleur, $nummerbord)<br />
{<br />
$this-&gt;merk = $merk;<br />
$this-&gt;kleur = $kleur;<br />
$this-&gt;nummerbord = $nummerbord;<br />
//we willen niet dat hier de lichten aan kunnen gaan!<br />
//$this-&gt;lichten = rand(0, 1);<br />
}</p>
<p>public function switchLichten()<br />
{<br />
return false;<br />
}<br />
}</p>
<p>En voor de bmw:</p>
<p><code>class BMW extends Auto<br />
{<br />
public function handrem(){} //geen handrem meer!</code></p>
<p>public function kijkOpSnelheidsmeter()<br />
{<br />
return $this-&gt;snelheid + rand(-10, 10);<br />
}<br />
}</p>
<p>Zoals je ziet kost het dus helemaal geen moeite om 3 verschillende auto’s maken!</p>
<h2>Laat maar zien hoe makkelijk je dit gebruikt dan!</h2>
<p>Oke, hoe je het gebruikt is eigenlijk gewoon hetzelfde als met een normale klasse! Ik zal jullie ff een voorbeeldcode geven om het uit te kunnen testen <img src='http://webmasterplein.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Bekijk die <a href="/blog/uploads/posts/php-oop-we-extenden-onze-kennis/auto.php.html" target="_blank">hier</a>, <a href="/blog/uploads/posts/php-oop-we-extenden-onze-kennis/auto.class.php.html" target="_blank">de uiteindelijke versie van de klassen </a>is hier te vinden.<br />
Maar, waarvoor kan ik dit dan gebruiken!<br />
Het kunnen extenden van klasses is erg handig bij het gebruik maken van <a href="http://webmasterplein.net/blog/2008/12/php-fouten-afhandelen-met-exceptions/">Exceptions</a>. Ook is het erg handig als je een systeem maakt dat kan worden gedownload/gekocht door iedereen! Dan kun je een db klasse maken die alle standaard dingen met de db afhandeld, een mysql klasse maken die db extend en alle dingen doet waarvoor het type nodig is. En dan zo ook een pgsql klasse maken enz.</p>
<h2>Tja, dat was het..</h2>
<p>Ik hoop dat je het nu begrijpt en kunt toepassen. Snap je iets niet of wil je nog iets anders weten, moet ik nog iets anders behandelen? Vraag het in de comments of op het forum! En onthoud: nog een keer lezen en dingen uitproberen is gratis!</p>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/12/php-oop-we-extenden-onze-kennis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP: Fouten afhandelen met Exceptions</title>
		<link>http://webmasterplein.net/blog/2008/12/php-fouten-afhandelen-met-exceptions/</link>
		<comments>http://webmasterplein.net/blog/2008/12/php-fouten-afhandelen-met-exceptions/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 20:49:05 +0000</pubDate>
		<dc:creator>DoubleJ</dc:creator>
				<category><![CDATA[Scripten]]></category>
		<category><![CDATA[Exceptions]]></category>
		<category><![CDATA[foutafhandeling]]></category>
		<category><![CDATA[geavanceerde technieken]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=132</guid>
		<description><![CDATA[Met de komst van php 5, heeft php een nieuwe manier geïntroduceerd waarmee je fouten kan afhandelen in je code. Deze manier is het opvangen van exceptions, welke jouw code genereert. Voor iedereen die al eens met een object georiënteerde taal heeft geprogrammeerd, zoals met JAVA, zal deze wijze totaal niet vreemd zijn.
Om uit te [...]]]></description>
			<content:encoded><![CDATA[<p>Met de komst van php 5, heeft php een nieuwe manier geïntroduceerd waarmee je fouten kan afhandelen in je code. Deze manier is het opvangen van exceptions, welke jouw code genereert. Voor iedereen die al eens met een object georiënteerde taal heeft geprogrammeerd, zoals met JAVA, zal deze wijze totaal niet vreemd zijn.</p>
<p>Om uit te leggen hoe je van deze wijze van  fouten afhandeling gebruik kan maken, zal ik dit uitleggen aan de hand van een programmeervoorbeeld. In dit programmeervoorbeeld haal ik uit een tabel met berichten, de berichttitel, in dit geval gaan we van een phpBB tabel uit.</p>
<p><span id="more-132"></span></p>
<h3>Hoe doen we het nu</h3>
<p>Dit artikel gaat er van uit dat je kennis hebt van hoe object georienteerd programmeren in php werkt. Zo niet is het handig om eerst <a title="Object Georienteerd programmeren" href="http://webmasterplein.net/blog/2008/11/php-oop-wat-en-hoe/">dit artikel</a> aandachtig door te nemen.</p>
<p>Allereerst begin ik met de manier waarop normaal in PHP fouten die optreden worden afgehandeld. Hiervoor heb ik een bestand gemaakt met een aantal aangepaste SQL functies, om de omvang van het bericht te minimaliseren zal ik steeds naar dit SQL bestand verwijzen. We beginnen met ons eerste <a href="http://webmasterplein.net/blog/uploads/posts/fouten-afhandelen-met-exceptions/sql_normal.html">sql_bestand</a>.</p>
<p>Onderstaande code zal uit de database de onderwerpen van de berichten halen, en deze weergeven op je pagina.</p>
<p><code>&lt;?php<br />
include('sql_none.php');<br />
$db = 'phpbb';<br />
$host = 'localhost';<br />
$pass = '';<br />
$user = 'root';if (!($connection = connect($user, $pass, $host, $db)))<br />
{<br />
die('Failed to connect to DB');<br />
}$sql = 'SELECT post_subject FROM phpbb_posts';if (!($result = sql_query($sql, $connection)))<br />
{<br />
die('Failed to query DB');<br />
}</p>
<p>while ($row = sql_fetch_array($result))<br />
{<br />
echo $row['post_subject'] . '<br />
';<br />
}<br />
if (!sql_close($connection))<br />
{<br />
die('Failed to close DB');<br />
}<br />
exit;<br />
?&gt;</p>
<p></code></p>
<p>Door gebruik te maken van de <strong>false </strong>uitkomsten van de verschillende SQL functies, kunnen we controleren of een functie gelukt is of niet. Wat hier gelijk opvalt, is dat de foutverwerking in de code zit verweven door middel van de <strong>if-then-else</strong> statements. Doordat de fouten verwerking binnen in je code zit, kan dit soms er voor zorgen dat je code niet heel duidelijk wordt. Helaas is bovenstaande code niet dermate complex om dit te kunnen weergeven. Het idee achter exceptions is dus ook onder andere het scheiden van foutafhandeling van je daadwerkelijke code geweest. Verder kun je het ook heel handig gebruiken om je fouten te identificeren. We gaan nu verder in op hoe je Exceptions zou kunnen toepassen op bovenstaande code.</p>
<h3>Implementeren van exceptions</h3>
<p>Om beter te begrijpen wat het volgende codevoorbeeld doet, is het eerst belangrijk om te weten wat er nou precies gebeurd wanneer er een Exception optreed. De constructie die achter Exceptions zit is de volgende:</p>
<ol>
<li>Je voert een functie uit.</li>
<li>Er treed een fout op in de functie, de functie gooit hierop een Exception. Keyword hierbij is <code>throw</code>.</li>
<li>Je script gaat op zoek naar de eerst volgende Exception vanger. Keyword hierbij is <code>catch</code>.</li>
<li>Je script voert de code uit, die bij deze Exception opvanger staat.</li>
<li>Je script gaat hieronder verder.</li>
</ol>
<p>Belangrijk hier om te weten is, dat alle code tussen de functie die de Exception laat optreden en de opvanger van de Exception <strong>niet</strong> wordt uitgevoerd.  Maar wat is nu precies die Exception. Exception is een class binnen php. Wanneer er een fout optreed in je functie, maak je een instance aan van de Exception class, waarna je deze class laat gooien. In je php code ziet dat er op de volgende wijze uit:</p>
<p><code>if ($error) throw new Exception('Een fout');</code></p>
<p>Wanneer je error <strong>true</strong> is, zal deze code een Exception gooien, met de door jouw ingevoerde foutmelding in de vorm van een <strong>string</strong>. Het is niet verplicht om een string mee te geven aan de functie, maar dit is voor jezelf wel handig voor het debuggen. Wanneer we deze code implementeren levert ons dat het volgende <a href="http://webmasterplein.net/blog/uploads/posts/fouten-afhandelen-met-exceptions/sql_exception.html">sql_bestand</a> op. In plaats van dat we <code>return false</code> gebruiken om een fout aan te geven, gooien we nu een exception. Wanneer de exception gegooid wordt, zal de functie stoppen en zal in de code gezocht worden naar de eerst volgende Exception vanger.</p>
<h3>Opvangen van Exceptions</h3>
<p>We hebben nu dus functies die Exceptions gooien, wanneer er iets fout gaat. Echter hebben we daar niets aan als we deze ook niet kunnen opvangen. De code om dit te doen ziet er &#8217;schematisch&#8217; ongeveer het volgende uit: Probeer { code } vang op { exception }.</p>
<p>In php code ziet dit er als volgt uit:</p>
<p><code>try<br />
{<br />
do_stuff();<br />
}<br />
catch (Exception $e)<br />
{<br />
echo $e-&gt;getMessage();<br />
}</code></p>
<p>Er wordt geprobeerd om de code die in het <strong>try</strong> gedeelte staat, uit te voeren. Wanneer er echter een een Exception optreed zal <strong>Exception</strong> optreed, zal het script springen naar de eerst volgende <strong>catch</strong> statement wat bij die Exception hoort en de code die hierin staat uitvoeren. Wanneer we dit gaan toepassen op ons vorige code voorbeeld, ziet onze code er als volgt uit:</p>
<p><code>&lt;?php<br />
include('sql_general.php');<br />
try<br />
{<br />
$db = 'phpbb';<br />
$host = 'localhost';<br />
$pass = '';<br />
$user = 'root';$connection = connect($user, $pass, $host, $db);$sql = 'SELECT post_subject FROM phpbb_posts';$result = sql_query($sql, $connection);</p>
<p>while ($row = sql_fetch_array($result))<br />
{<br />
echo $row['post_subject'] . '<br />
';<br />
}<br />
sql_close($connection);<br />
}<br />
catch (Exception $e)<br />
{<br />
echo 'Caught: ' .$e-&gt;getMessage(). '<br />
';<br />
}<br />
?&gt;</p>
<p></code></p>
<p>Het eerste wat opvalt is dat nu de foutafhandeling compleet los staat van de rest van je code, wat resulteert in beter leesbare code wanneer je aan de slag gaat met complexere scripts. Daarnaast zien we ook een bepaalde functie naar voren komen welke onderdeel is van de Exception class. <strong>getMessage()</strong> print de fout string, die jij in je Exception declaratie hebt meegegeven. Hiermee kan je bijvoorbeeld aangeven waar je Exception is opgetreden.</p>
<p>Al met al bied bovenstaande code een heleboel leuke mogelijkheden, echter is dit nog niet erg handig nog in gebruik, omdat ik hier alleen maar een tekst string heb die mij verteld welke foutmelding er precies is geweest. Alle foutmeldingen zijn van het type Exception en dat is slechts een type.</p>
<h3>Geavanceerde technieken</h3>
<p>En nu komt dan eindelijk een van de grote voordelen om de hoek kijken die het object georiënteerd programmeren met zich meebrengt, namelijk het feit dat ik een class kan uitbreiden. In mijn bovenstaande code voorbeeld zou je bijvoorbeeld kunnen denken dat het handig is om de volgende foutmeldingen te kunnen waarnemen:</p>
<ul>
<li>Connectie fout</li>
<li>Database selectie fout</li>
<li>Etc.</li>
</ul>
<p>We kunnen dus onze eigen Exceptions creëren, bijvoorbeeld:<br />
<code>class ConnectException extends Exception { }</code><br />
Maar dat is niet het enige. We kunnen ook meerdere <code>catch</code> clausules onder elkaar maken, waarmee we de verschillende Exceptions kunnen opvangen, bijvoorbeeld:</p>
<p><code>catch (FirstException $e) { echo $e-&gt;getMessage(); }<br />
catch (SecondException $e) { echo $e-&gt;getMessage(); }</code></p>
<p>Hiermee kunnen we per fout dus een apart stukje code aanroepen dat afgehandeld wordt wanneer een bepaalde fout optreed. We kunnen dus nu ons <a href="http://webmasterplein.net/blog/uploads/posts/fouten-afhandelen-met-exceptions/sql_costum.html">sql_bestand</a> aanpassen en deze eigen foutmeldingen toepassen. En wanneer we ook ons script aanpassen komt het er als volgt uit te zien:</p>
<p><code>&lt;?php<br />
include('sql_costumised.php');<br />
try<br />
{<br />
$db = 'phpbb';<br />
$host = 'loalhost';<br />
$pass = '';<br />
$user = 'root';$connection = connect($user, $pass, $host, $db);$sql = 'SELECT post_subject FROM phpbb_posts';$result = sql_query($sql, $connection);</p>
<p>while ($row = sql_fetch_array($result))<br />
{<br />
echo $row['post_subject'] . '<br />
';<br />
}<br />
sql_close($connection);<br />
}<br />
catch (SelectConnectException $e)<br />
{<br />
// eerst deze afvangen, want anders vangt de parent van deze class (Connect Exception) deze error op.<br />
echo 'Caught: ' .$e-&gt;getMessage(). '<br />
';<br />
echo 'Handel hier dingen af wanneer je een fout hebt bij het selecteren van de DB.';<br />
// Een voorbeeld van een handeling zou de volgende kunnen zijn: er is nog een db verbinding open, dus sluit deze.<br />
mysql_close();<br />
}<br />
catch (ConnectException $e)<br />
{<br />
echo 'Caught: ' .$e-&gt;getMessage(). '<br />
';<br />
echo 'Handel hier dingen af wanneer je fouten krijgt bij de verbinding met de database server.';<br />
}<br />
catch (QueryException $e)<br />
{<br />
echo 'Caught: ' .$e-&gt;getMessage(). '<br />
';<br />
echo 'Handel hier dingen af, wanneer je sql query fouten oplevert.';<br />
// Ook hier zou je eventueel de database verbinding nog kunnen verbreken, immers deze verbinding is er wel omdat bovenstaande<br />
// Exceptions niet zijn geweest.<br />
}<br />
catch (CloseException $e)<br />
{<br />
echo 'Caught: ' .$e-&gt;getMessage(). '<br />
';<br />
echo 'Handel hier dingen af, wanneer je de database verbinding niet correct afsluit.';<br />
}<br />
// Vang alle overige Exceptions<br />
catch (Exception $e)<br />
{<br />
// Exception is de parent van ALLE exceptions, dus deze zal alle overige exceptions afvangen.<br />
// Gebruik deze dus ook ALTIJD aan het einde van je catch lijst, zodat je specifieke fouten wel kan opvangen.<br />
echo 'Caught: ' .$e-&gt;getMessage(). '<br />
';<br />
}<br />
?&gt;</p>
<p></code></p>
<p>De exception opvangers zien er nu zeer complex uit, maar bovenstaande constructie bied een legio aan mogelijkheden. Zo kun je bepaalde stukken code uitvoeren wanneer je een bepaalde fout krijgt, je kunt bijvoorbeeld de sql verbinding afbreken.</p>
<p>Belangrijk is het wel dat wanneer je je eigen Exceptions gaat creëren, dat je wel al je Exceptions die kunnen optreden, ook daadwerkelijk opvangt. Immers het php script zal pas verdergaan met de code, na je exception opvanger.</p>
<p>Ik hoop dat ik jullie hiermee een beetje een introductie heb kunnen geven in deze nieuwe manier van het opvangen van fouten die optreden tijdens het uitvoeren van je code en hoop natuurlijk dat dit je helpt bij het schrijven van betere code voor de toekomst.</p>
<p>Voor meer informatie over hoe Exceptions werken, kijk je het best even op de site van <a title="Exceptions - php.net" href="http://nl2.php.net/manual/en/language.exceptions.php">php.net over Exceptions</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/12/php-fouten-afhandelen-met-exceptions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP OOP &#8211; wat en hoe?</title>
		<link>http://webmasterplein.net/blog/2008/11/php-oop-wat-en-hoe/</link>
		<comments>http://webmasterplein.net/blog/2008/11/php-oop-wat-en-hoe/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 22:04:52 +0000</pubDate>
		<dc:creator>Libia</dc:creator>
				<category><![CDATA[Scripten]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=97</guid>
		<description><![CDATA[Veel beginnende php-ers hebben moeite met OOP. Vaak hebben ze moeite met het begrijpen waar OOP nou eigenlijk voor dient en hoe je dit dan het beste kunt gebruiken. In deze tutorial zal ik uitleggen wat het idee achter OOP is en de basis van hoe je dit gebruikt.
In deze tutorial ga ik er wel [...]]]></description>
			<content:encoded><![CDATA[<p>Veel beginnende php-ers hebben moeite met OOP. Vaak hebben ze moeite met het begrijpen waar OOP nou eigenlijk voor dient en hoe je dit dan het beste kunt gebruiken. In deze tutorial zal ik uitleggen wat het idee achter OOP is en de basis van hoe je dit gebruikt.</p>
<p>In deze tutorial ga ik er wel vanuit dat je minimaal PHP versie 5.* gebruikt, voor deze versie is de ondersteuning van OOP namelijk heel slecht.</p>
<p><span id="more-97"></span></p>
<h2>Dus.. wat is OOP nou eigenlijk?</h2>
<p>OOP staat voor object oriented programming. Dit is dus het gebruiken van objecten bij het programmeren. Vaak wordt OOP met klassen (classes) verward, maar dit is niet helemaal het zelfde, OOP gaat namelijk ook over de manier waarop je die gebruikt enzovoort.</p>
<p>OOP bestaat trouwens niet in PHP, maar in de meeste andere talen. Van alle talen waarin OOP ondersteund wordt is de ondersteuning van PHP zelfs een van de minst uitgebreide.</p>
<h2>Oke! Maar wat zijn die klassen dan?</h2>
<p>De basis van OOP zijn de klassen. Een klasse (class in PHP) kun je wel zien als een blauwdruk of gewoon een object (daar komt de eerste O in OOP dus vandaan <img src='http://webmasterplein.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ). In een klasse stop je methods. Dit zijn eigenlijk gewoon functies, maar dan in een klasse. Daarnaast kun je er ook variabelen in stoppen. Eigenlijk is een klasse dus een verzameling van functies die over gezamenlijke variabelen beschikken.</p>
<h2>Juist ja, maar wat is dan het nut? Kan ik niet gewoon functies gebruiken?</h2>
<p>Het nut van een functie is, dat je een bepaald stuk code op meerdere plaatsen kunt gebruiken, terwijl je de code maar één keer typt! Het nut van een klasse is dat je verschillende functies samen laat werken. In sommige gevallen is het dus handiger om functies te gebruiken en in sommige gevallen is het handiger om klassen te gebruiken.</p>
<h2>Hoe maak ik dan zo&#8217;n klasse?</h2>
<p>Even geduld, ik heb eerst nog één kleine opmerking. Ik ga in deze tut een voorbeeld van een klasse voor een auto gebruiken, natuurlijk heb je hier niets aan in je code, maar het is wel handig om aan te tonen wat je met klassen kunt!</p>
<p>Een klasse openen in PHP is nog makkelijker dan een functie openen, je doet namelijk gewoon dit (let op, de naam is net zoals bijna alles in PHP <strong>hoofdlettergevoelig</strong>):</p>
<p>[code lang="php"]<?php<br />
class Auto<br />
{<br />
}<br />
?>[/code]</p>
<p>Een klasse op zich kan niet erg veel.. sterker nog, het kan helemaal niets! Elke keer als je een bepaalde klasse wilt gebruiken (je kunt elke klasse natuurlijk vaker gebruiken, zelfs tegelijkertijd), moet je er een instantie van maken. Vanuit deze instantie gaan we later ook weer de methods aanroepen.</p>
<p>Het maken van een instantie doe je zo:</p>
<p>[code lang="php"]<?php<br />
$bmw = new Auto(); //Dit wordt mijn BMW!<br />
$ferrari = new Auto(); //Dit wordt mijn Ferrari, omdat de variabele naam anders is dan die van de BMW, zullen ze elkaar niet lastig vallen!<br />
?>[/code]</p>
<h2>Maar, hier kan ik toch helemaal niets mee?</h2>
<p>Dat heb je heel goed gezien! Om er wel iets mee te kunnen gaan we nu eerst variabelen toe voegen. Deze variabelen zijn wel iets anders dan gewone variabelen, je kunt ze namelijk: private, protected en public maken.</p>
<ul class="unIndentedList">
<li> <span style="underline;">Private</span> variabelen kunnen alleen worden benaderd vanuit de klasse waarvan ze onderdeel zijn.</li>
<li> <span style="underline;">Protected</span> variabelen kunnen alleen worden benaderd vanuit de klasse waarvan ze onderdeel zijn en vanuit klassen die een aanvulling zijn op deze klasse.</li>
<li> <span style="underline;">Public</span> variabelen kunnen ‘overal&#8217; vandaan worden benaderd.</li>
</ul>
<p>Een variabele moet aan het begin van de klasse worden aangegeven, je kunt daar kiezen voor het soort variabele, de naam van de variabele en eventueel de waarde. Dit kun je zo doen:</p>
<p>[code lang="php"]<?php<br />
[type] $[naam]; //variabele zonder waarde<br />
[type] $[naam] = [waarde]; //variabele met waarde<br />
?>[/code]</p>
<h2>Laat me dan nu variabelen toevoegen aan onze klasse!</h2>
<p>In onze klasse gaan we variabelen gebruiken om de kenmerken van onze auto aan te geven: merk, kleur, snelheid, nummerbord, lichten (aan/uit). Dan krijgen we dus zoiets:</p>
<p>[code lang="php"]<?php<br />
class Auto<br />
{<br />
public $merk = 'onbekend';<br />
public $kleur = ‘onbekend';<br />
public $nummerbord = 'on-be-kend';<br />
protected $snelheid = 0;<br />
protected $lichten = false; //lichten standaard uit<br />
}<br />
?>[/code]</p>
<p>Het is niet nodig om de public variabelen van de protected variabelen te scheiden, maar dat doe ik hier gewoon voor de duidelijkheid.</p>
<h2>Ik wil de variabelen nu kunnen aanpassen!</h2>
<p>Om dingen uit een instantie te benaderen gebruik je in PHP -> . In ons voorbeeld kunnen we dus dit gebruiken:</p>
<p>[code lang="php"]<?php<br />
$bmw = new Auto(); //Dit wordt mijn BMW!<br />
$ferrari = new Auto(); //Dit wordt mijn Ferrari, omdat de variabele naam anders is dan die van de BMW, zullen ze elkaar niet lastig vallen!</p>
<p>$ferrari->merk = ‘Ferrari';<br />
$ferrari->kleur = ‘rood' ;<br />
$ferrari->nummerbord = ‘PH-PO-OP';</p>
<p>echo $ferrari->merk . ‘ '; //Ferrari<br />
echo $ferrari->kleur . ‘'; //rood<br />
echo $ferrari->nummerbord . ‘</p>
<p>'; //PH-PO-OP</p>
<p>echo $bmw->merk . ‘</p>
<p>' ; //onbekend</p>
<p>$bmw->merk = ‘BMW';</p>
<p>echo $bmw->merk; //BMW<br />
?>[/code]</p>
<h2>Tja, een auto, maar hij kan toch helemaal niets!</h2>
<p>Om de auto dingen te laten doen, gaan we de methods gebruiken, maar wat wel handig is om eerst te weten: variabelen van de klasse kun je binnen de klasse aanroepen met $this.</p>
<p>Omdat een method ongeveer het zelfde is als een functie, is de manier hoe je hem aanmaakt ook ongeveer hetzelfde. Het enige verschil is, dat je weer private, protected en public moet gebruiken! Dit doe je dan dus zo:</p>
<p>[code lang="php"]<?php<br />
[type] function [naam]([parameters])<br />
{<br />
}<br />
?>[/code]</p>
<p>Laten we dit dan maar aan onze klasse toe gaan voegen, zodat het eindelijk echt ergens op begint te lijken!</p>
<p>[code lang="php"]<?php<br />
class Auto<br />
{<br />
public $merk = ‘onbekend';<br />
public $kleur = ‘onbekend';<br />
public $nummerbord = ‘on-be-kend';<br />
protected $snelheid = 0;<br />
protected $lichten = false; //lichten standaard uit</p>
<p>public function geefGas($snelheid = 5)<br />
{<br />
$this->snelheid += $snelheid; //Let op dat je hier niet in de war raakt!</p>
<p>echo ‘Vroem!'; //normaal echo je niet in een method, maar anders wordt het wel erg omslachtig!<br />
}</p>
<p>public function geefMinderGas($snelheid = 5)<br />
{<br />
$this->snelheid -= $snelheid; //natuurlijk kun je dit ook bereiken met de vorige method, bij een snelheid van -5 <img src='http://webmasterplein.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>echo ‘Pfffff!';<br />
}</p>
<p>public function handrem()<br />
{<br />
$snelheid = $this->snelheid; //de oude snelheid bewaren</p>
<p>$this->snelheid = 0;</p>
<p>echo ‘IIIIIIIEEEEEEEE!';</p>
<p>$this->botsing($snelheid); //roep een andere method aan<br />
}</p>
<p>public function switchLichten()<br />
{<br />
$this->lichten = !$this->lichten;</p>
<p>return $this->lichten;<br />
}</p>
<p>private function botsing($beginsnelheid)<br />
{<br />
if(!rand(0, 9) || $beginsnelheid > 100 || $beginsnelheid < -100)<br />
{<br />
echo ‘BOEM!';<br />
}<br />
}<br />
}<br />
?>[/code]</p>
<h2>Hoe gebruik ik deze methods?</h2>
<p>Een method gebruiken is het zelfde als een variabele gebruiken! We kunnen nu dus bijvoorbeeld zo&#8217;n code krijgen:</p>
<p>[code lang="php"]<br />
<?php<br />
$bmw = new Auto(); //Dit wordt mijn BMW!<br />
$ferrari = new Auto(); //Dit wordt mijn Ferrari, omdat de variabele naam anders is dan die van de BMW, zullen ze elkaar niet lastig vallen!<br />
$ferrari->merk = 'Ferrari';<br />
$ferrari->kleur = ‘rood' ;<br />
$ferrari->nummerbord = ‘PH-PO-OP';<br />
echo $ferrari->merk . ‘ '; //Ferrari<br />
echo $ferrari->kleur . ‘'; //rood<br />
echo $ferrari->nummerbord . ‘</p>
<p>'; //PH-PO-OP<br />
echo $bmw->merk . ‘</p>
<p>' ; //onbekend<br />
$bmw->merk = ‘BMW';<br />
echo $bmw->merk; //BMW<br />
echo ‘</p>
<p>';<br />
//En nu de methods (ik gebruik ff alleen ferrari)<br />
$ferrari->geefGas();<br />
$ferrari->geefMinderGas();<br />
$ferrari->geefGas(100);<br />
$ferrari->geefMinderGas(10);<br />
$ferrari->geefGas(47);<br />
$ferrari->geefMinderGas(38); //snelheid wordt nu 99 als ik me niet vergis..<br />
$ferrari->handrem();</p>
<p>$rand = rand(5, 15);<br />
for($i  = 0; $i < $rand; $i++)<br />
{<br />
$ferrari->switchLichten();<br />
}</p>
<p>echo ($ferrari->switchLichten()) ? ‘Aan' : ‘Uit';<br />
?><br />
[/code]</p>
<h2>Dat is stoer! Het is alleen wel een beetje omslachtig om op deze manier de eigenschappen te moeten aangeven!</h2>
<p>Er zijn ook nog speciale methods, deze beginnen met twee liggende streepjes __ . één daarvan is de constructor. Als we deze toevoegen aan onze klasse, dan komt hij er zo uit te zien:</p>
<p>[code lang="php"]<?php<br />
class Auto<br />
{<br />
	public $merk = ‘onbekend';<br />
	public $kleur = ‘onbekend';<br />
	public $nummerbord = ‘on-be-kend';<br />
	protected $snelheid = 0;<br />
	protected $lichten = false; //lichten standaard uit</p>
<p>	public function __construct($merk, $kleur, $nummerbord)<br />
	{<br />
		$this->merk = $merk;<br />
		$this->kleur = $kleur;<br />
		$this->nummerbord = $nummerbord;</p>
<p>		$this->lichten = rand(0, 1);<br />
	}</p>
<p>	public function geefGas($snelheid = 5)<br />
	{<br />
		$this->snelheid += $snelheid; //Let op dat je hier niet in de war raakt!</p>
<p>		echo ‘Vroem!'; //normaal echo je niet in een method, maar anders wordt het wel erg omslachtig!<br />
	}</p>
<p>	public function geefMinderGas($snelheid = 5)<br />
	{<br />
		$this->snelheid -= $snelheid; //natuurlijk kun je dit ook bereiken met de vorige method, bij een snelheid van -5 <img src='http://webmasterplein.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>		echo ‘Pfffff!';<br />
	}</p>
<p>	public function handrem()<br />
	{<br />
		$snelheid = $this->snelheid; //de oude snelheid bewaren</p>
<p>		$this->snelheid = 0;</p>
<p>		echo ‘IIIIIIIEEEEEEEE!';</p>
<p>		$this->botsing($snelheid); //roep een andere method aan<br />
	}</p>
<p>	public function switchLichten()<br />
	{<br />
		$this->lichten = !$this->lichten;</p>
<p>		return $this->lichten;<br />
	}</p>
<p>	private function botsing($beginsnelheid)<br />
	{<br />
		if(!rand(0, 9) || $beginsnelheid > 100 || $beginsnelheid < -100)<br />
		{<br />
			echo ‘BOEM!';<br />
		}<br />
	}<br />
}<br />
?>[/code]</p>
<p>Dit kunnen we nu gebruiken om op een snelle manier eigenschappen aan een instantie mee te geven! Omdat het geen normale method is, kun je wel verwachten dat je hem ook niet zo aanroept! De construct method wordt aangeroepen als een nieuwe instantie van de klasse wordt gemaakt:</p>
<p>[code lang="php"]<?php<br />
$bmw = new Auto(‘BMW', ‘Pimpel paars met zilveren sterretjes', ‘OO-PP-HP'); //Dit wordt mijn BMW!<br />
$ferrari = new Auto(‘Ferrari', ‘rood', ‘PH-PO-OP'); //Dit wordt mijn Ferrari, omdat de variabele naam anders is dan die van de BMW, zullen ze elkaar niet lastig vallen!</p>
<p>echo $ferrari->merk . ‘ '; //Ferrari<br />
echo $ferrari->kleur . ‘'; //rood<br />
echo $ferrari->nummerbord . ‘</p>
<p>'; //PH-PO-OP</p>
<p>echo $bmw->merk; //BMW</p>
<p>echo ‘</p>
<p>';</p>
<p>//En nu de methods (ik gebruik ff alleen ferrari)<br />
$ferrari->geefGas();<br />
$ferrari->geefMinderGas();<br />
$ferrari->geefGas(100);<br />
$ferrari->geefMinderGas(10);<br />
$ferrari->geefGas(47);<br />
$ferrari->geefMinderGas(38); //snelheid wordt nu 99 als ik me niet vergis..<br />
$ferrari->handrem();</p>
<p>$rand = rand(5, 15);<br />
for($i  = 0; $i < $rand; $i++)<br />
{<br />
	$ferrari->switchLichten();<br />
}</p>
<p>echo ($ferrari->switchLichten()) ? ‘Aan' : ‘Uit';<br />
?>[/code]</p>
<p>Zo dat maakt je code weer lekker een stuk korter!</p>
<h2>Bedankt! Nu snap ik het!</h2>
<p>Graag gedaan! Tip: zorg dat je alles wat hier boven staat goed snapt en ga dan zelf experimenteren. En reacties, commentaar, opmerkingen, aanmerkingen, verbeteringen, enz. zijn natuurlijk altijd welkom <img src='http://webmasterplein.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/11/php-oop-wat-en-hoe/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Single-Quotes VS. Double-Quotes</title>
		<link>http://webmasterplein.net/blog/2008/10/single-quotes-vs-double-quotes/</link>
		<comments>http://webmasterplein.net/blog/2008/10/single-quotes-vs-double-quotes/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 16:37:20 +0000</pubDate>
		<dc:creator>Remi</dc:creator>
				<category><![CDATA[Scripten]]></category>
		<category><![CDATA[double quotes]]></category>
		<category><![CDATA[php echo]]></category>
		<category><![CDATA[php variabelen]]></category>
		<category><![CDATA[quotes]]></category>
		<category><![CDATA[single quotes]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=77</guid>
		<description><![CDATA[Iedereen die begint met programmeren komt regelmatig single-quotes en double-quotes tegen. En weet vaak niet het verschil, betekent het wat anders? Doet het wat anders? Of is het ene makkelijker dan het andere. In dit blog artikeltje probeer ik hier iets meer uitleg over te geven.

Quotes
Quotes is een Engelse term voor aanhalingstekens, maar aangezien in [...]]]></description>
			<content:encoded><![CDATA[<p>Iedereen die begint met programmeren komt regelmatig single-quotes en double-quotes tegen. En weet vaak niet het verschil, betekent het wat anders? Doet het wat anders? Of is het ene makkelijker dan het andere. In dit blog artikeltje probeer ik hier iets meer uitleg over te geven.</p>
<p><span id="more-77"></span></p>
<p><strong>Quotes</strong></p>
<p>Quotes is een Engelse term voor aanhalingstekens, maar aangezien in het programmeren Engelse terminologie wordt gebruikt hebben we het over quotes.</p>
<p>Single-quote: <em><strong>&#8216;</strong>Hello<strong>&#8216;</strong></em></p>
<p>Double-quote: <em><strong>&#8220;</strong>Hello<strong>&#8220;</strong></em></p>
<p><strong>Verschillen</strong></p>
<p>Ik ga de verschillen illustreren in php, deze verschillen liggen meestal ook zo bij andere programmeertalen (maar dus niet altijd)</p>
<p style="30px;"><span style="underline;">Single-Quotes</span></p>
<p><code><span class="syntaxdefault"><span style="#003366;">$sString</span> </span><span style="#008000;"><span class="syntaxkeyword">= </span></span><span class="syntaxstring"><span style="#800000;">'World'</span> </span><span style="#008000;"><span class="syntaxkeyword">;</span></span></code></p>
<p style="30px;"><span class="syntaxcomment"><span style="#008000;">echo <span style="#800000;">&#8216;Hello $sString&#8217; </span>;</span></span></p>
<p>geeft: <em>Hello $sString</em></p>
<p style="30px;">Als je Hello World wilt krijgen, dan moet je de variabel buiten de quotes brengen:</p>
<p style="30px;"><span class="syntaxcomment"><span style="#008000;">echo <span style="#800000;">&#8216;Hello&#8217; <span style="#003366;"><span style="#008000;">. </span>$sString</span> </span>;</span></span></p>
<p><span style="#000000;">Geeft dan wel: <em>Hello World</em></span></p>
<p style="30px;"><span style="underline;">Double-Quotes</span></p>
<p><code><span class="syntaxdefault"><span style="#003366;">$sString</span> </span><span style="#008000;"><span class="syntaxkeyword">= </span></span><span class="syntaxstring"><span style="#800000;">'World'</span> </span><span style="#008000;"><span class="syntaxkeyword">;</span></span></code></p>
<p style="30px;"><span class="syntaxcomment"><span style="#008000;">echo <span style="#800000;">&#8216;Hello $sString&#8217; </span>;</span></span></p>
<p>geeft: <em>Hello World</em></p>
<p style="30px;">Ook kan je bij double-quotes de variabel buiten de quotes zetten.</p>
<p style="30px;"><span class="syntaxcomment"><span style="#008000;">echo <span style="#800000;">&#8216;Hello&#8217; <span style="#003366;"><span style="#008000;">. </span>$sString</span> </span>;</span></span></p>
<p><span style="#000000;">Geeft : <em>Hello World</em></span></p>
<p style="30px;"><strong>Wat is het best?</strong></p>
<p style="30px;">Ik zelf prefereer de single-quotes, omdat ik dit zelf duidelijker vind staan. Je maakt als programmeur zelf het verschil duidelijk tussen gewone tekst en variabelen en laat dat niet over aan de parser van php.</p>
<p>Het voordeel van double-quotes is dat het lekker snel programmeert, want je hoeft niet de hele tijd de variabelen buiten de quotes te zetten.</p>
<p>Maar ik zelf vind duidelijkheid en overzicht belangrijker dan de snelheid waar mee een script geschreven wordt, dus doe mij daarom maar de single-quotes.</p>
<p style="30px;">
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/10/single-quotes-vs-double-quotes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Microsoft Silverlight 2, eindelijk &#8220;light up the web&#8221;?</title>
		<link>http://webmasterplein.net/blog/2008/10/microsoft-silverlight-2-eindelijk-light-up-the-web/</link>
		<comments>http://webmasterplein.net/blog/2008/10/microsoft-silverlight-2-eindelijk-light-up-the-web/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 20:09:47 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Grafisch]]></category>
		<category><![CDATA[Scripten]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[interactief]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=68</guid>
		<description><![CDATA[Voor die gene die niet weten wat Silverlight is: het is de concurent van de Flash-player en is net als de Flash-player een plug-in voor browsers. Microsoft heeft gister zijn tweede versie van Silverlight geïntroduceerd. Microsoft Silverlight 2 is de opvolger van versie 1 en heeft vele veranderingen ondergaan, waaronder meer mogelijkheden tot het schrijven [...]]]></description>
			<content:encoded><![CDATA[<p>Voor die gene die niet weten wat Silverlight is: het is de concurent van de Flash-player en is net als de Flash-player een plug-in voor browsers. Microsoft heeft gister zijn tweede versie van Silverlight geïntroduceerd. Microsoft Silverlight 2 is de opvolger van versie 1 en heeft vele veranderingen ondergaan, waaronder meer mogelijkheden tot het schrijven van Silverlight applicaties.</p>
<p>Ondersteuing van .Net-framework, een deepzoom feature, advertentie weergave en betere beveiligde drm (Digital Rights Management) zijn nieuwe toevoegingen voor de nieuwe versie van Silverlight. Ook de GUI-objecten (Graphical User Interface) uit Silverlight hebben een grote verandering ondergaan, hierdoor is de applicatie overzichtelijker geworden, zowel voor de programmeur als voor de beginner in Silverlight.</p>
<p>Door de ondersteuning van .Net-framework is in Silverlight nu mogelijk om applicaties te maken in C#, Javascript, IronPython en IronRuby.</p>
<p>Silverlight 2 is downloaden op de site van <a href="http://www.microsoft.com/silverlight/" target="_blank">Microsoft Silverlight</a>. Huidige installaties van Silverlight worden automatisch geüpdate.</p>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/10/microsoft-silverlight-2-eindelijk-light-up-the-web/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Flash Player 10, interactieve 3D-applicaties komen tot leven!</title>
		<link>http://webmasterplein.net/blog/2008/10/flash-player-10-3d-applicaties-komen-tot-leven/</link>
		<comments>http://webmasterplein.net/blog/2008/10/flash-player-10-3d-applicaties-komen-tot-leven/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 20:09:39 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Grafisch]]></category>
		<category><![CDATA[Scripten]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[10]]></category>
		<category><![CDATA[3d-animaties]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[flashplayer]]></category>
		<category><![CDATA[interactief]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=70</guid>
		<description><![CDATA[Vandaag heeft Adobe een nieuwe versie van zijn reeks Flash Players uitgegeven, wel te verstaan onder de naam Flash Player 10. Adobe heeft zelf veel gedaan voor het aanspreken van de GPU (Graphics processing unit), dit is dan ook wel nodig met de 3D-applicaties die zeer gemakkelijk gemaakt kunnen worden voor deze nieuwe Flash Player.
De [...]]]></description>
			<content:encoded><![CDATA[<p>Vandaag heeft Adobe een nieuwe versie van zijn reeks Flash Players uitgegeven, wel te verstaan onder de naam Flash Player 10. Adobe heeft zelf veel gedaan voor het aanspreken van de GPU (Graphics processing unit), dit is dan ook wel nodig met de 3D-applicaties die zeer gemakkelijk gemaakt kunnen worden voor deze nieuwe Flash Player.</p>
<p>De grootste verbetering van het programma is dus het &#8217;showen&#8217; van 3D-objecten in een flash-animatie. In de eerder deze maand uitgebrachte Adobe Flash CS4 is een tool gebouwd om gemakkelijk 2D-objecten te converteren naar 3D-objecten. De nieuwe tool in het programma is de &#8216;authoringtool&#8217; en kan ingezet worden op elk figuur, zowel op tekst als op een graphic.</p>
<p>De layout van tekst kan in Flash CS4 verbeterd worden dankzij de nieuwe Flash Player. Zo kan de tekst meerdere opmaken krijgen en je kan per Frame deze opmaak ook werkelijk veranderen. Shadow en Glow zijn nieuwe onderdelen die tijdens het afspelen van de tekst-animatie blijven bestaan, maar hierdoor krijgt de GPU het soms wel moeilijk. Daarom is het bij het maken van dit soort animaties handig om de GPU aan te spreken op zijn gedrag en eventueel een andere versnelling van de GPU in te stellen.</p>
<p>Ook wat totaal niet mocht ontbreken in de nieuwe Flash Player is het animeren van HD-kwaliteit video&#8217;s, waarbij de gemiddelde HD-kwaliteit ligt op h.264 formaat. Hierdoor zullen animaties en applicaties nog mooier worden dan in de Flash Player 9 formaat. Flash Player 9 had soms in de applicaties nog moeite met oudere versies van Flash maar dat is met versie 10 helemaal verhopen. De compabiliteit van versie 10 is erg verbeterd ten opzichte van versie 9.</p>
<p>Flash Player 10 is beschikbaar voor Windows, MacOS x en Linux en is te downloaden op de website van <a href="http://www.adobe.com/products/flashplayer/" target="_blank">Adobe Flash Player</a>. Op die website zie je meteen ook al een klein voorproefje van de toekomst van de flash-animaties.</p>
<p>Afgelopen week werd Silverlight 2 ook al uitgebracht door Microsoft en bezit ook vele extra&#8217;s. Probeer zelf uit te vinden welke player jij het beste vind werken!</p>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/10/flash-player-10-3d-applicaties-komen-tot-leven/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Google: &#8220;Dynamische URLs boven statistische URLs&#8221;</title>
		<link>http://webmasterplein.net/blog/2008/09/google-dynamische-urls-boven-statistische-urls/</link>
		<comments>http://webmasterplein.net/blog/2008/09/google-dynamische-urls-boven-statistische-urls/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 19:23:01 +0000</pubDate>
		<dc:creator>Stef</dc:creator>
				<category><![CDATA[Scripten]]></category>
		<category><![CDATA[Webtalk]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googleblog]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=35</guid>
		<description><![CDATA[In een bericht op Google&#8217;s Webmasters Blog werd gisteren duidelijkheid gegeven over hoe de populaire zoekmachine nu omgaat met dynamische URL&#8217;s. Opvallend in deze blogpost was voornamelijk het feit dat Google de dynamische URL aanbeveelt boven de statische URL.
Op internet doemde al jaren het idee dat Google moeite heeft met dynamische URL&#8217;s, hoewel Google indirect [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://googlewebmastercentral.blogspot.com/2008/09/dynamic-urls-vs-static-urls.html">een bericht</a> op Google&#8217;s Webmasters Blog werd gisteren duidelijkheid gegeven over hoe de populaire zoekmachine nu omgaat met dynamische URL&#8217;s. Opvallend in deze blogpost was voornamelijk het feit dat Google de dynamische URL aanbeveelt boven de statische URL.</p>
<p>Op internet doemde al jaren het idee dat Google moeite heeft met dynamische URL&#8217;s, hoewel Google indirect toegeeft dat dit in het verleden ook zo was, is dit nu verleden tijd en schrijft men:</p>
<blockquote><p>We can crawl dynamic URLs and interpret the different parameters. We might have problems crawling and ranking your dynamic URLs if you try to make your urls look static and in the process hide parameters which offer the Googlebot valuable information. One recommendation is to <strong><strong><em>avoid reformatting a dynamic URL to make it look static</em></strong>.</strong> It’s always advisable to use static content with static URLs as much as possible, but in cases where you decide to use dynamic content, you should give us the possibility to analyze your URL structure and not remove information by hiding parameters and making them look static.</p></blockquote>
<p>Het populaire mod_rewriting is volgens Google niet de juiste keuze om content duidelijk weer te geven, liever hebben ze de dynamische URL zodat Google zelf de informatie er uit pikt die het wil hebben. Bang dat de webmaster enkele handige informatie voor de zoekmachine achterhoud.</p>
<p>Op de weblog van <a href="http://googlewebmastercentral.blogspot.com/">Google Webmaster Central</a> heeft het in ieder geval geleid voor flink wat <a href="https://www.blogger.com/comment.g?blogID=32069983&amp;postID=7266186239298631175&amp;pli=1">discussie</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/09/google-dynamische-urls-boven-statistische-urls/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simpel debuggen met PHP</title>
		<link>http://webmasterplein.net/blog/2008/06/simpel-debuggen-met-php/</link>
		<comments>http://webmasterplein.net/blog/2008/06/simpel-debuggen-met-php/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 16:55:01 +0000</pubDate>
		<dc:creator>Rik</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Scripten]]></category>
		<category><![CDATA[debuggen]]></category>
		<category><![CDATA[errors]]></category>
		<category><![CDATA[free code]]></category>
		<category><![CDATA[notice]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[simpel]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=15</guid>
		<description><![CDATA[Het programmeren in PHP is vaak al moeilijk genoeg en wat informatie over waar je mee bezig bent is altijd wel fijn. Daarom doen veel programmeurs een hoop echo&#8217;s tussendoor om wat informatie over de variabelen te krijgen. Helaas een niet ontzettend mooie manier, je code wordt al snel onoverzichtelijk en je moet de echo&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Het programmeren in PHP is vaak al moeilijk genoeg en wat informatie over waar je mee bezig bent is altijd wel fijn. Daarom doen veel programmeurs een hoop echo&#8217;s tussendoor om wat informatie over de variabelen te krijgen. Helaas een niet ontzettend mooie manier, je code wordt al snel onoverzichtelijk en je moet de echo&#8217;s weer allemaal gaan weghalen, die je later misschien weer nodig hebt.</p>
<p><span id="more-15"></span></p>
<p>Daarom heb ik een simpele class geschreven om het debuggen net iets makkelijker te maken (<a title="Debugclass" href="http://www.webvibes.nl/wmp/class.debug.phps">download)</a>. Deze class bevat een aantal simpele functies die het debuggen wat makkelijker en ook mooier maken. Niets van de debug-informatie wordt ge-output voordat je de functie <em>display()</em> aanroept. Alle debug-informatie kun je dus fijn laten staan.</p>
<p>Genoeg gepraat, laten we eens kijken hoe het werkt:</p>
<pre>&lt;?php
require_once('../class.debug.php'); // Include bestand
$d = new Debugger(); // Maak een nieuwe debugger instance

$d-&gt;write('Debug test'); // Schrijf een nieuwe debug-regel
$d-&gt;display(); // Echo alles
?&gt;</pre>
<p>Deze code zal, natuurlijk, de class <em>includen</em> en de regel &#8216;Debug test&#8217; weergeven, door de functie display. Ik hoop deze code nog wel een beetje duidelijk is, zo moeilijk zal het niet zijn. Al de output zal trouwens in &#8216;&lt;div id=&#8221;debug&#8221;&gt;&#8217; komen te staan, zodat je deze makkelijk kan stylen of verbergen.</p>
<p>Natuurlijk is deze simpele debug-regeltjes schrijven niet het enige wat je met de debugger kan:</p>
<pre>&lt;?php
require_once('../class.debug.php');
$d = new Debugger();

$d-&gt;var_dump(array('a', 'b'), 'testArray'); // Doe een var dump

$d-&gt;benchmark('before'); // Benchmark
sleep(3); // Doe hier 'iets'
$d-&gt;benchmark('after'); // Nog een benchmark
$d-&gt;benchmarks_result('before', 'after'); // Vergelijk resultaten

$d-&gt;display();
?&gt;</pre>
<p>Nog een stukje code voor jullie. Weer niet zo heel erg moeilijk. Wat we als eerste doen is een var dump. Deze gebruikt de standaard var_dump functie van PHP, maar zet deze tussen de andere debug regels. Het eerste argument is de variabel die je wil dumpen, het mag van elk type zijn, dus niet alleen <em>arrays</em>. De tweede is een naam die je mag opgeven (dus optioneel), zo kan je je dump makkelijk herkennen.</p>
<p>Daarna gaan we wat performance testen, wat hier ontzettend simpel werkt. Je <em>benchmarked</em> eerst een punt, doet iets en daarna nog een punt. Met de functie benchmarks_result()  kan je daarna te tijd krijgen die er tussen 2 benchmarks zit. Eigenlijk heel simpel, toch?</p>
<p>Er zijn nog een aantal laatste dingen. Zo kan je bijvoorbeeld alle debug data loggen in een bestand of zelfs gebruik maken van een error handler:</p>
<pre>&lt;?php
require_once('../class.debug.php');
$d = new Debugger('debuglog.txt'); // Deze keer met een anders bestand als debug log (optioneel)
set_error_handler(array($d, 'error')); // Eigen error handler gebruiken
$d-&gt;log = true; // Loggen aanzetten

$d-&gt;display();
?&gt;</pre>
<p>Het log bestand komt standaard in debug.log, maar je kan dus je eigen bestand meegeven als eerste argument bij het nieuwe object, daarna moet je het wel nog aanzetten. De error handler is nog ontzettend beperkt, zo kan je bijvoorbeeld niet zien of het een <em>notice warning</em> of andere error is. Ik raad je ook aan om, via het tweede argument, het aantal errors waarbij de debug error handler te beperken naar alleen notices en warnings. Wat er gebeurd bij een <em>fatal error</em> heb ik niet getest, maar ik ben bang dat je niet meer dan een wit scherm krijgt.</p>
<p>Ik hoop dat ik genoeg uitleg heb gegeven over hoe de debugger werkt, het helpt je weliswaar niet met ontzettend veel informatie te geven, maar als je zelf een plek hebt om je informatie kwijt te kunnen kan al ontzettend fijn zijn, geloof me!</p>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/06/simpel-debuggen-met-php/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Favicon het kroontje op je website</title>
		<link>http://webmasterplein.net/blog/2008/05/favicon-het-kroontje-op-je-website/</link>
		<comments>http://webmasterplein.net/blog/2008/05/favicon-het-kroontje-op-je-website/#comments</comments>
		<pubDate>Sat, 24 May 2008 13:00:30 +0000</pubDate>
		<dc:creator>Stef</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Leesvoer]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Scripten]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[favicon]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=11</guid>
		<description><![CDATA[Een recentere versie van deze log vindt u op de website van de auteur.
Je kent ze vast wel de bekende iconen in de adresbalk en tabbladen, ze zorgen niet enkel voor een mooi compleet beeld van je website, het zorgt ook voor herkenning in je tabbladenbalk en bladwijzerlijst. We pakken bijvoorbeeld:  en je ziet [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://stefft.nl/2010/03/favicon-het-kroontje-op-je-website/">Een recentere versie van deze log vindt u op de website van de auteur</a>.</p>
<p>Je kent ze vast wel de bekende iconen in de adresbalk en tabbladen, ze zorgen niet enkel voor een mooi compleet beeld van je website, het zorgt ook voor herkenning in je tabbladenbalk en bladwijzerlijst. We pakken bijvoorbeeld: <a href="http://webmasterplein.net/blog/uploads/Stef/2008/05/google.ico"><img class="alignnone size-full wp-image-18" title="google" src="http://webmasterplein.net/blog/uploads/Stef/2008/05/google.ico" alt="" /></a> en je ziet direct dat het van Google afkomstig is, <a href="http://webmasterplein.net/blog/uploads/Stef/2008/05/microsoft.ico"><img class="alignnone size-full wp-image-17" title="microsoft" src="http://webmasterplein.net/blog/uploads/Stef/2008/05/microsoft.ico" alt="" /></a> is Microsoft en <a href="http://webmasterplein.net/blog/uploads/Stef/2008/05/geenstijl.ico"><img class="alignnone size-full wp-image-16" title="geenstijl" src="http://webmasterplein.net/blog/uploads/Stef/2008/05/geenstijl.ico" alt="" /></a> jawel&#8230; Geenstijl. Kortom een fav(orite)-icoon staat niet alleen leuk, het bouwt ook herkenbaarheid op.<br />
<span id="more-11"></span><br />
Een favicon voor je website is geen noodzaak, maar het helpt je bezoekers wel jouw website eruit te plukken, in bijvoorbeeld de bladwijzerlijst. Laten we dus uiteenzetten hoe we het favicon plaatsen op je website.</p>
<p><span style="font-weight: bold">Formaat:</span><br />
Het favicon bevat altijd de afmeting 16 breed en 16 hoog, dit is het universele formaat waarin je icoon zeker goed wordt weergegeven.</p>
<p>De afbeelding moet worden opgeslagen worden in het ico-formaat hier zijn verschillende programma&#8217;s voor:</p>
<ul>
<li><a href="http://www.degraeve.com/favicon/">Favicon Editor (online)</a></li>
<li><a href="http://www.telegraphics.com.au/sw/#icoformat">ICOFormat (photoshop plugin)</a></li>
<li><a href="http://www.winterdrache.de/freeware/png2ico/">PNG to icon converter</a></li>
</ul>
<p><span style="font-weight: bold">Plaatsen:</span><br />
Je favicon plaats je in de root van je website, dus op de plek waar in 9 van de 10 gevallen zich ook het index.html bestand bevind. Zodra je hem hebt geüpload naar de root, zouden browsers hem automatisch moeten herkennen en weergeven.</p>
<p>Gebeurd dit niet of wil je de favicon in een andere directory stallen dan kun je door middel van de link tag hem in je website zetten:</p>
<p><code>&amp;lt;link href="./favicon.ico" link rel="shortcut icon" type="image/x-icon" /&amp;gt;</code></p>
<p><code>&amp;lt;html&amp;gt;<br />
&amp;lt;head&amp;gt;<br />
&amp;lt;title&amp;gt;Mijndomein.nl&amp;lt;/title&amp;gt;<br />
&amp;lt;link href="./stylesheet.css" rel="stylesheet" type="text/css" media="all" /&amp;gt;<br />
&amp;lt;link href="./favicon.ico" link rel="shortcut icon" type="image/x-icon" /&amp;gt;<br />
&amp;lt;/head&amp;gt;<br />
&amp;lt;body&amp;gt;</code></p>
<ul><strong>Opmerking:</strong><br />
Mocht je het opslaan als ico-formaat lastig vinden, dan wijk je hier vanaf en maak je een gif-afbeelding en vul je in het href-attribuut gewoon: &#8220;favicon.gif&#8221; in.<br />
<code>&amp;lt;link href="./favicon.gif" link rel="shortcut icon" type="image/x-icon" /&amp;gt;</code><br />
Let op: Dan wordt hij niet automatisch door browsers herkent en zul je op iedere pagina deze regel moeten plaatsen.</ul>
<p><strong>Inspiratie:</strong><br />
Op het prachtige inspiratieblog Smashing Magazine vind je 5 blogposts om inspiraties op te doen voor jouw eigen unieke favicon:</p>
<ul>
<li> <a class="postlink" href="http://www.smashingmagazine.com/2007/01/31/inspire-yourself-50-remarkable-favicons/">Inspire Yourself: 50 Remarkable Favicons</a></li>
<li> <a class="postlink" href="http://www.smashingmagazine.com/2007/03/29/inspire-yourself-more-creative-favicons/">Inspire Yourself: More Creative Favicons</a></li>
<li> <a class="postlink" href="http://www.smashingmagazine.com/2007/06/14/creative-favicons-when-small-is-beautiful/">Creative Favicons: When Small Is Beautiful</a></li>
<li> <a class="postlink" href="http://www.smashingmagazine.com/2007/09/11/creative-favicons-tiny-artwork/">Creative Favicons: Tiny Artwork</a></li>
<li> <a class="postlink" href="http://www.smashingmagazine.com/2008/01/01/favicons-episode-5-the-delicate-beauties/">Favicons Episode 5: The Delicate Beauties</a></li>
</ul>
<p><span style="font-weight: bold">Tips bij het maken</span></p>
<ol style="list-style-type: arabic-numbers">
<li> Trek een gelijkenis met je website; Zorg dat je icoon overeenkomt met je website, is je website simpel en strak? Zorg voor een simpel en strak icoontje. Verwerk de kleuren van je site in het icoon. Of pak de eerste letter van je logo.</li>
<li> Houd het simpel; Je hebt maar 16&#215;16 als grootte, dat is klein en ga dus geen ingewikkelde afbeeldingen er in verwerken die worden meestal niet herkend.</li>
<li> Transparante icoontjes; Onthoud dat met een achtergrondkleur je favicon een blok wordt en dus niet samengaat met je adresbalk. Als voorbeeld het oude favicon van webmasterplein: <a href="http://webmasterplein.net/blog/uploads/Stef/2008/05/favicon-oud1.png"><img class="alignnone size-full wp-image-13" title="favicon-oud" src="http://webmasterplein.net/blog/uploads/Stef/2008/05/favicon-oud1.png" alt="WMP Favicon oud" width="16" height="16" /></a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/05/favicon-het-kroontje-op-je-website/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Frameworks: The choice of the professional</title>
		<link>http://webmasterplein.net/blog/2008/05/frameworks-the-choice-of-the-professional/</link>
		<comments>http://webmasterplein.net/blog/2008/05/frameworks-the-choice-of-the-professional/#comments</comments>
		<pubDate>Sat, 24 May 2008 11:10:17 +0000</pubDate>
		<dc:creator>Rik</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Scripten]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://webmasterplein.net/blog/?p=9</guid>
		<description><![CDATA[Vanaf de laatste vakantie ben ik steeds meer, en ook steeds professioneler bezig met PHP. Het gaat er wel heel anders aan toe dan dat ik verwacht had, hoe meer je met PHP bezig bent, des te minder dat je helemaal van de basis af programmeert. In plaats daarvan ga je meer gebruikmaken van Frameworks.

Nou, [...]]]></description>
			<content:encoded><![CDATA[<p>Vanaf de laatste vakantie ben ik steeds meer, en ook steeds professioneler bezig met PHP. Het gaat er wel heel anders aan toe dan dat ik verwacht had, hoe meer je met PHP bezig bent, des te minder dat je helemaal van de basis af programmeert. In plaats daarvan ga je meer gebruikmaken van Frameworks.</p>
<p><span id="more-9"></span></p>
<p><strong>Nou, wat is het idee achter een Framework?</strong> Het idee achter een Framework is dat je steeds dezelfde dingen programmeert, maar met een beetje maatwerk erin. En als dat het geval is, waarom zou je dan steeds hetzelfde programmeren? Frameworks doen dat voor jou: De Frameworks kunnen van alles doen, en jij bent er om ze te vertellen wat ze moeten doen.</p>
<p>Wat voor <strong>voordelen</strong> heeft een Framework dan zoal?</p>
<p>Een Framework ten eerste ontzettend <strong>tijdbesparend</strong>. En nee, daarmee bedoel ik niet dat je op een groot project een paar uurtjes minder besteed, daarmee bedoel ik dat je nog niet eens een kwart van de tijd bezig bent. Geloof me, de tijd om een Framework te leren heb je in Ã©Ã©n klein project al gelijk weer ingehaald.</p>
<p>Ook bevordert een Framework het <strong>mooier programmeren</strong>. De meeste moderne Frameworks gebruiken het <strong>MVC-pattern</strong>. Deze zorgt ervoor dat je je code mooi opdeelt. Ik zal een korte uitleg over het MVC-pattern geven:</p>
<p>De <strong>model (M)</strong> doet eigenlijk het echte werk, de bedoeling is dat alleen de model query&#8217;s op de database uitvoert, naar bestanden schrijft en het echte rekenwerk doet. De model wordt helaas toch wel vaak in het MVC-pattern. De controller (C, Zie beneden) dient dan als controller en model.</p>
<p>De <strong>view (V)</strong> is eigenlijk het HTML bestand. Deze mag dus al helemaal geen query&#8217;s uitvoeren, of naar bestanden schrijven, of rekenwerk doen. Nee, het is puur het grafische, met wat PHP variabelen of template-parser variabelen. Wil je toch iets anders hebben in je views? Heel simpel, zorg ervoor dat je PHP functies van je controller of model in je views kan gebruiken. Nee, dit gaat niet tegen de regels van MVC, het blijft net zo overzichtelijk, zo niet, overzichtelijker.</p>
<p>De <strong>controller (C) </strong>is eigenlijk wat de hele boel bij elkaar houdt. Hij staat tussen de model en de view in, hij roept functies in de model aan en zorgt ervoor dat alles weer terugkomt in de goede view file met de goede data erin. Zoals al eerder gezegd, wordt de controller te vaak ook als model gebruikt.</p>
<p>Hopelijk heb ik hiermee het MVC pattern een beetje uitgelegd. Voor wat meer informatie zal je moeten Googlen, maar helaas is er vrij weinig goede informatie over te vinden. Maarja, gewoon beginnen, dan leer je het vanzelf!</p>
<p>Een Framework heeft natuurlijk niet alleen maar voordelen, maar ook <strong>nadelen:</strong></p>
<p>Dat je zelf een hele hoop programmeert, zegt natuurlijk dat je in totaal minder regels code gebruikt. Het grootste nadeel is dan ook Frameworks <strong>groot</strong> en soms <strong>langzaam</strong> zijn. Een hele hoop code wordt uitgevoerd <em>voor het geval dat</em> . <em>Voor het geval dat</em> een module een &#8220;custom query&#8221; wil, moeten we dat nakijken. In de meeste gevallen is dat natuurlijk niet nodig. Een erg groot nadeel dus.</p>
<p>Wat ook erg ergerlijk kan zijn aan Framework is, <strong>dat je toch weer iets nieuws moet gaan leren</strong>. Je werkt dan weliswaar nog in PHP, je <span style="text-decoration: line-through;">moet</span> zou gebruiken moeten maken van de functies van het Framework, omdat dat vaak beter qua samenwerking met het Framework. Al die dingen leren kost toch wel een hoop tijd. Wat dus ook een van de belangrijkste dingen van een Framework is, is documentatie. Gelukkig zijn er een aantal goed gedocumenteerde Frameworks te vinden.</p>
<p>Helaas is het geven van een voorbeeld nogal moeilijk, hoewel Frameworks de hoeveelheid code die je schrijft ontzettend verminderen, blijft er in veel Frameworks toch nog een hoop code over. Dat is trouwens niet altijd slecht voor een Framework, meer code betekent meestal wel meer vrijheid.</p>
<p>Om je toch een beetje op weg te helpen met PHP Frameworks, zal ik een lijstje opstellen met Frameworks inclusief een kleine beschrijving:</p>
<ol>
<li><a title="CodeIgniter: PHP Framework" href="http://www.codeigniter.com">CodeIgniter</a>: CodeIgniter is een prachtig all-round framework, dat gebruik maakt van het MVC pattern. De extreem goede documentatie maakt het echt een genoegen om mee te werken.</li>
<li><a title="CakePHP: Nog een MVC Framework" href="http://www.cakephp.org">CakePHP</a>: Nog zo&#8217;n all-round Framework, die ook gebruik maakt het MVC Pattern. Ook wel aardig gedocumenteerd.</li>
<li><a title="Zend Framework" href="http://framework.zend.com">Zend Framework</a>: En nog zo&#8217;n zelfde Framework, maar dan van het grote Zend.</li>
</ol>
<p>Waarschijnlijk heb ik je wel een beetje overtuigd, maar misschien ben je zelfs zo enthousiast dat je gelijk zelf een Framework wil gaan maken. Dat raad ik je helaas af. De meeste veelgebruikte Frameworks zijn door professionele teams gebouwd en de PHP-wereld zit helaas al aardig vol met Frameworks.</p>
<p>Probeer dus eerst echt andere Frameworks te leren kennen. Geloof me, PHP is nog nooit zo leuk geweest als met een Framework!</p>
]]></content:encoded>
			<wfw:commentRss>http://webmasterplein.net/blog/2008/05/frameworks-the-choice-of-the-professional/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
