Kan iemand mij enkele handige tutorials geven over het leren van OOP,
want ik heb opgevangen dat dit zeer handig is om te kunnen.
Maar ik heb al enkele tutorials bekeken, Maar snap er echt NIETS van
Matthias Rochtus
?
Onbekende gebruiker
13-08-2009 20:26
Mijn god, Matthias, heb eens geduld. OOP leer je niet in 10 minuten... je moet een geheel andere kijk op PHP aanleren.
Even een kort OOP voorbeeldje, zodat je kunt zien wat er mogelijk is:
<?php
abstract class Game {
private $aantal_spelers;
public function __construct ($aantal_spelers) {
$this->aantal_spelers = $aantal_spelers;
}
abstract function startGame ();
abstract function endGame ();
public function runGame () {
$this->startGame ();
$this->printWinner ();
$this->endGame ();
}
public function printWinner () {
echo '<p>De winnaar is speler nummer ' . mt_rand (1, $this->aantal_spelers) . '</p>';
}
}
class Klaverjassen extends Game {
public function startGame () {
echo '<h2>We beginnen te klaverjassen. De kaarten worden geschud.</h2>';
}
public function endGame () {
echo '<p>Ziezo, we zijn uitgekaart. Iemand een biertje?</p>';
}
}
class Voetballen extends Game {
public function startGame () {
echo '<h2>Daar klinkt het fluitje van de scheids</h2>';
}
public function endGame () {
echo '<p>Op zich lekker gespeeld. Jammer van die gele kaart.</p>';
}
public function printWinner () {
echo '<p>De winnaar is team nummer ' . mt_rand (1, 2) . '</p>';
}
}
$wedstrijd = new Klaverjassen (4);
$wedstrijd->runGame ();
$wedstrijd = new Voetballen (22);
$wedstrijd->runGame ();
?>
Uitvoer:
<h2>We beginnen te klaverjassen. De kaarten worden geschud.</h2>
<p>De winnaar is speler nummer 2</p>
<p>Ziezo, we zijn uitgekaart. Iemand een biertje?</p>
<h2>Daar klinkt het fluitje van de scheids</h2>
<p>De winnaar is team nummer 1</p>
<p>Op zich lekker gespeeld. Jammer van die gele kaart.</p>
public methods kan je van buiten de class aanroepen, zoals Jan doet bij $wedstrijd->runGame. private methods kan je alleen van binnen de class zelf aanroepen, zoals $this->startGame en $this->endGame worden aangeroepen.
Dan heb je ook nog protected methods, dezen kan je vanuit de class zelf, en van uit alle classes die van die class overerven aanroepen, maar niet van buiten zoals met public.
De classes Klaverjassen en Voetballen kunnen dus niet bij $this->aantal_spelers van de class Game, omdat die member-variabele private is. Zou hij protected zijn, dan zouden de 2 overervende classes er wel bij kunnen. Zou je hem public maken, dan kan je er ook via $wedstrijd->aantal_spelers bij.
abstract function startGame ();
abstract function endGame ();
Een abstracte functie gebruik je als je zeker weet dat alle childclasses deze functie moeten hebben, maar dat ze hem allemaal anders zullen implementeren.
Een voorbeeld zou een functie voortbewegen () zijn in een class die een voertuig beschrijft. In de childclass Vliegtuig betekent voortbewegen vliegen, en in de childclass Trein betekent voortbewegen rijden. Boot = varen, enz.