Webmasterplein Blog

met passie voor het web

Archive for the ‘Algemeen’ Category

PHP OOP - wat en hoe?

dinsdag
Nov 18,2008

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 vanuit dat je minimaal PHP versie 5.* gebruikt, voor deze versie is de ondersteuning van OOP namelijk heel slecht.

Dus.. wat is OOP nou eigenlijk?

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.

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.

Oke! Maar wat zijn die klassen dan?

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 ;) ). 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.

Juist ja, maar wat is dan het nut? Kan ik niet gewoon functies gebruiken?

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.

Hoe maak ik dan zo’n klasse?

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!

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 hoofdlettergevoelig):

  1. <?php<br />
  2. class Auto<br />
  3. {<br />
  4. }<br />
  5. ?>

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.

Het maken van een instantie doe je zo:

  1. <?php<br />
  2. $bmw = new Auto(); //Dit wordt mijn BMW!<br />
  3. $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 />
  4. ?>

Maar, hier kan ik toch helemaal niets mee?

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.

  • Private variabelen kunnen alleen worden benaderd vanuit de klasse waarvan ze onderdeel zijn.
  • Protected variabelen kunnen alleen worden benaderd vanuit de klasse waarvan ze onderdeel zijn en vanuit klassen die een aanvulling zijn op deze klasse.
  • Public variabelen kunnen ‘overal’ vandaan worden benaderd.

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:

  1. <?php<br />
  2. [type] $[naam]; //variabele zonder waarde<br />
  3. [type] $[naam] = [waarde]; //variabele met waarde<br />
  4. ?>

Laat me dan nu variabelen toevoegen aan onze klasse!

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:

  1. <?php<br />
  2. class Auto<br />
  3. {<br />
  4. public $merk = ‘onbekend’;<br />
  5. public $kleur = ‘onbekend‘;<br />
  6. public $nummerbord = ‘on-be-kend‘;<br />
  7. protected $snelheid = 0;<br />
  8. protected $lichten = false; //lichten standaard uit<br />
  9. }<br />
  10. ?>

Het is niet nodig om de public variabelen van de protected variabelen te scheiden, maar dat doe ik hier gewoon voor de duidelijkheid.

Ik wil de variabelen nu kunnen aanpassen!

Om dingen uit een instantie te benaderen gebruik je in PHP -> . In ons voorbeeld kunnen we dus dit gebruiken:

  1. <?php<br />
  2. $bmw = new Auto(); //Dit wordt mijn BMW!<br />
  3. $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>
  4. <p>$ferrari->merk = ‘Ferrari‘;<br />
  5. $ferrari->kleur = ‘rood’ ;<br />
  6. $ferrari->nummerbord = ‘PH-PO-OP‘;</p>
  7. <p>echo $ferrari->merk . ‘ <br />’; //Ferrari<br />
  8. echo $ferrari->kleur . ‘<br />‘; //rood<br />
  9. echo $ferrari->nummerbord . ‘</p>
  10. <p>’; //PH-PO-OP</p>
  11. <p>echo $bmw->merk . ‘</p>
  12. <p>‘ ; //onbekend</p>
  13. <p>$bmw->merk = ‘BMW’;</p>
  14. <p>echo $bmw->merk; //BMW<br />
  15. ?>

Tja, een auto, maar hij kan toch helemaal niets!

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.

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:

  1. <?php<br />
  2. [type] function [naam]([parameters])<br />
  3. {<br />
  4. }<br />
  5. ?>

Laten we dit dan maar aan onze klasse toe gaan voegen, zodat het eindelijk echt ergens op begint te lijken!

  1. <?php<br />
  2. class Auto<br />
  3. {<br />
  4. public $merk = ‘onbekend‘;<br />
  5. public $kleur = ‘onbekend’;<br />
  6. public $nummerbord = ‘on-be-kend‘;<br />
  7. protected $snelheid = 0;<br />
  8. protected $lichten = false; //lichten standaard uit</p>
  9. <p>public function geefGas($snelheid = 5)<br />
  10. {<br />
  11. $this->snelheid += $snelheid; //Let op dat je hier niet in de war raakt!</p>
  12. <p>echo ‘Vroem!<br />’; //normaal echo je niet in een method, maar anders wordt het wel erg omslachtig!<br />
  13. }</p>
  14. <p>public function geefMinderGas($snelheid = 5)<br />
  15. {<br />
  16. $this->snelheid -= $snelheid; //natuurlijk kun je dit ook bereiken met de vorige method, bij een snelheid van -5 ;)</p>
  17. <p>echo ‘Pfffff!<br />‘;<br />
  18. }</p>
  19. <p>public function handrem()<br />
  20. {<br />
  21. $snelheid = $this->snelheid; //de oude snelheid bewaren</p>
  22. <p>$this->snelheid = 0;</p>
  23. <p>echo ‘IIIIIIIEEEEEEEE!<br />’;</p>
  24. <p>$this->botsing($snelheid); //roep een andere method aan<br />
  25. }</p>
  26. <p>public function switchLichten()<br />
  27. {<br />
  28. $this->lichten = !$this->lichten;</p>
  29. <p>return $this->lichten;<br />
  30. }</p>
  31. <p>private function botsing($beginsnelheid)<br />
  32. {<br />
  33. if(!rand(0, 9) || $beginsnelheid > 100 || $beginsnelheid < -100)<br />
  34. {<br />
  35. echo ‘BOEM!<br />‘;<br />
  36. }<br />
  37. }<br />
  38. }<br />
  39. ?>

Hoe gebruik ik deze methods?

Een method gebruiken is het zelfde als een variabele gebruiken! We kunnen nu dus bijvoorbeeld zo’n code krijgen:

  1. <br />
  2. <?php<br />
  3. $bmw = new Auto(); //Dit wordt mijn BMW!<br />
  4. $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 />
  5. $ferrari->merk = ‘Ferrari’;<br />
  6. $ferrari->kleur = ‘rood‘ ;<br />
  7. $ferrari->nummerbord = ‘PH-PO-OP’;<br />
  8. echo $ferrari->merk . ‘ <br />‘; //Ferrari<br />
  9. echo $ferrari->kleur . ‘<br />’; //rood<br />
  10. echo $ferrari->nummerbord . ‘</p>
  11. <p>‘; //PH-PO-OP<br />
  12. echo $bmw->merk . ‘</p>
  13. <p>’ ; //onbekend<br />
  14. $bmw->merk = ‘BMW‘;<br />
  15. echo $bmw->merk; //BMW<br />
  16. echo ‘</p>
  17. <p>’;<br />
  18. //En nu de methods (ik gebruik ff alleen ferrari)<br />
  19. $ferrari->geefGas();<br />
  20. $ferrari->geefMinderGas();<br />
  21. $ferrari->geefGas(100);<br />
  22. $ferrari->geefMinderGas(10);<br />
  23. $ferrari->geefGas(47);<br />
  24. $ferrari->geefMinderGas(38); //snelheid wordt nu 99 als ik me niet vergis..<br />
  25. $ferrari->handrem();</p>
  26. <p>$rand = rand(5, 15);<br />
  27. for($i  = 0; $i < $rand; $i++)<br />
  28. {<br />
  29. $ferrari->switchLichten();<br />
  30. }</p>
  31. <p>echo ($ferrari->switchLichten()) ? ‘Aan‘ : ‘Uit’;<br />
  32. ?><br />

Dat is stoer! Het is alleen wel een beetje omslachtig om op deze manier de eigenschappen te moeten aangeven!

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:

  1. <?php<br />
  2. class Auto<br />
  3. {<br />
  4.         public $merk = ‘onbekend‘;<br />
  5.         public $kleur = ‘onbekend’;<br />
  6.         public $nummerbord = ‘on-be-kend‘;<br />
  7.         protected $snelheid = 0;<br />
  8.         protected $lichten = false; //lichten standaard uit</p>
  9. <p>     public function __construct($merk, $kleur, $nummerbord)<br />
  10.         {<br />
  11.                 $this->merk = $merk;<br />
  12.                 $this->kleur = $kleur;<br />
  13.                 $this->nummerbord = $nummerbord;</p>
  14. <p>          $this->lichten = rand(0, 1);<br />
  15.         }</p>
  16. <p>     public function geefGas($snelheid = 5)<br />
  17.         {<br />
  18.                 $this->snelheid += $snelheid; //Let op dat je hier niet in de war raakt!</p>
  19. <p>          echo ‘Vroem!<br />’; //normaal echo je niet in een method, maar anders wordt het wel erg omslachtig!<br />
  20.         }</p>
  21. <p>     public function geefMinderGas($snelheid = 5)<br />
  22.         {<br />
  23.                 $this->snelheid -= $snelheid; //natuurlijk kun je dit ook bereiken met de vorige method, bij een snelheid van -5 ;)</p>
  24. <p>          echo ‘Pfffff!<br />‘;<br />
  25.         }</p>
  26. <p>     public function handrem()<br />
  27.         {<br />
  28.                 $snelheid = $this->snelheid; //de oude snelheid bewaren</p>
  29. <p>          $this->snelheid = 0;</p>
  30. <p>          echo ‘IIIIIIIEEEEEEEE!<br />’;</p>
  31. <p>          $this->botsing($snelheid); //roep een andere method aan<br />
  32.         }</p>
  33. <p>     public function switchLichten()<br />
  34.         {<br />
  35.                 $this->lichten = !$this->lichten;</p>
  36. <p>          return $this->lichten;<br />
  37.         }</p>
  38. <p>     private function botsing($beginsnelheid)<br />
  39.         {<br />
  40.                 if(!rand(0, 9) || $beginsnelheid > 100 || $beginsnelheid < -100)<br />
  41.                 {<br />
  42.                         echo ‘BOEM!<br />‘;<br />
  43.                 }<br />
  44.         }<br />
  45. }<br />
  46. ?>

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:

  1. <?php<br />
  2. $bmw = new Auto(‘BMW‘, ‘Pimpel paars met zilveren sterretjes’, ‘OO-PP-HP‘); //Dit wordt mijn BMW!<br />
  3. $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>
  4. <p>echo $ferrari->merk . ‘ <br />‘; //Ferrari<br />
  5. echo $ferrari->kleur . ‘<br />’; //rood<br />
  6. echo $ferrari->nummerbord . ‘</p>
  7. <p>‘; //PH-PO-OP</p>
  8. <p>echo $bmw->merk; //BMW</p>
  9. <p>echo ‘</p>
  10. <p>’;</p>
  11. <p>//En nu de methods (ik gebruik ff alleen ferrari)<br />
  12. $ferrari->geefGas();<br />
  13. $ferrari->geefMinderGas();<br />
  14. $ferrari->geefGas(100);<br />
  15. $ferrari->geefMinderGas(10);<br />
  16. $ferrari->geefGas(47);<br />
  17. $ferrari->geefMinderGas(38); //snelheid wordt nu 99 als ik me niet vergis..<br />
  18. $ferrari->handrem();</p>
  19. <p>$rand = rand(5, 15);<br />
  20. for($i  = 0; $i < $rand; $i++)<br />
  21. {<br />
  22.         $ferrari->switchLichten();<br />
  23. }</p>
  24. <p>echo ($ferrari->switchLichten()) ? ‘Aan‘ : ‘Uit’;<br />
  25. ?>

Zo dat maakt je code weer lekker een stuk korter!

Bedankt! Nu snap ik het!

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 :)

Single-Quotes VS. Double-Quotes

dinsdag
Okt 21,2008

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.

(more…)

woensdag
Okt 15,2008

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.

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.

Door de ondersteuning van .Net-framework is in Silverlight nu mogelijk om applicaties te maken in C#, Javascript, IronPython en IronRuby.

Silverlight 2 is downloaden op de site van Microsoft Silverlight. Huidige installaties van Silverlight worden automatisch geüpdate.

woensdag
Okt 15,2008

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 grootste verbetering van het programma is dus het ’showen’ 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 ‘authoringtool’ en kan ingezet worden op elk figuur, zowel op tekst als op een graphic.

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.

Ook wat totaal niet mocht ontbreken in de nieuwe Flash Player is het animeren van HD-kwaliteit video’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.

Flash Player 10 is beschikbaar voor Windows, MacOS x en Linux en is te downloaden op de website van Adobe Flash Player. Op die website zie je meteen ook al een klein voorproefje van de toekomst van de flash-animaties.

Afgelopen week werd Silverlight 2 ook al uitgebracht door Microsoft en bezit ook vele extra’s. Probeer zelf uit te vinden welke player jij het beste vind werken!

donderdag
Okt 9,2008

Microsoft probeert voor eind oktober een nieuwe hype de wereld in te roepen, namelijk het cloudcomputing. Microsoft heeft hiervoor het besturingssysteem Windows Cloud gemaakt, maar een naamswijziging zal nog mogelijk zijn. De naam Windows Cloud staat hier nog niet vast.

Met behulp van Windows Cloud moet het mogelijk zijn om applicaties, zoals Microsoft Office, op een server te draaien vanaf de browser van een client (de gebruiker van de applicatie). Volgens Steve Ballmer zal ondanks Windows Cloud de client nogsteeds gebruik maken van lokale software voor een snelle aanpassing. Windows Cloud zal vooral in openbare lokaties aanslaan, omdat je je eigen programma’s kan blijven gebruiken, ondanks dat het niet op de PC staat geïnstalleerd.

Bij vele mensen is bij het horen van het woord cloudcomputing niet bekend wat het nu exact betekend. Om hier alvast mee in te springen zeggen Engelse vaak “the cloud” terwijl ze “het internet” bedoelen. Het is dus eigenlijk een grote wolk waar je je zelf in bevind. De Nederlandse vertaling van “computing” is “computeren” waardoor als je de woordencombinaties samenvoegt je Internet computeren krijgt.

Cloudcomputing is een soort van het SaaS-computing (Software as a Service). Dat bekentend het op een afstand gebruiken van een software, die geïnstalleerd staat op een server. Zo is het voor ontwikkelaars en systeembeheerders zeer gemakkelijk om de software te updaten of te upgraden.

Ondanks de verwachte hoge prijs voor het cloudcomputing zal volgens Richard Stallman (oprichter van Free Software Foundation) zal het cloudcomputing een hype gaan worden. Stallman denkt dat vooral bedrijven zich met het cloudcomputing gaan bezighouden. Zo kunnen systeembeheerders van een bedrijf veel makkelijker het netwerk beheren, en alle bestanden van de werknemers staan centraal op 1 server. Mocht er een PC in een netwerk de geest geven, dan staan de documenten op de server.

Windows Cloud zal als kern het Hyper-V System van Microsoft hebben, en is gratis te downloaden. Voor deze software zal de desbetreffende server wel moeten draaien op Windows Server 2008


Op 9 oktober heeft Microsoft de nieuwe naam voor Windows Cloud laten weten. De roepnaam van het programma zal worden Windows Strata, en zal afkomstig zijn van een soort wolk die je in de atmosfeer kunt vinden (de stratosfeer of stratocumulus). Ook heeft het cloudcomputing met Window Strata een werkgroepnaam gekregen en dat is volgens Mary-Jo Foley ‘Red Dog’.