Ik heb een vraagje naar het in de praktijk brengen van verschillende klassen. In deze tutorial van markkaz ( http://development.blog.markkazemier.nl/2009/06/introductie-oop-gastenboek-bouwen/ ) wordt uitgelegd hoe je een OO gastenboek schrijft. Mijn vraag is nu, hoe breng je dit nu in de praktijk? Is het niet zo dat je dan procedurele code moet toepassen, zoals in dit geval:

<?php
if(isset($_POST['post']) {
$gebruiker->reactie_plaatsen($gastenboek, $_POST['reactie']);
}
else {
//formulier weergeven
}
?>

Alvast bedankt.
Onderaan staat een mooi stukje:
Gebruik

al doorgelezen?
``Joris,, schreef op 02.01.2010 20:22
Onderaan staat een mooi stukje:
Gebruik

al doorgelezen?


Jazeker, jij ook? Daar staat namelijk niet in hoe een externe gebruiker in de praktijk een bericht toe kan voegen.
Niels, bedankt voor je reactie, maar ook in dat artikel wordt het gebruik hetzelfde geillustreerd als in het eerste artikel.
Wouw,, je kan al zelf nadenken..
Met PHP ontsnap je niet aan procedurele code.
Uiteindelijk moet het altijd vanuit een file worden aangeroepen.
Dus je index.php zal er zoiets uitzien denk ik:
(niet getest)

<?php
$gastenboek = new Gastenboek('gastenboek.txt');
?>
<html>
<head>
<title>Gastenboek</title>
</head>
<body>
<div id="weergave">
<?php
echo $gastenboek->weergeven();
?>
</div>
<div id="reageren">
<?php
if ($_SERVER['REQUEST_METHOD'] == "post") {
$gebruiker = new Gebruiker($_POST['naam'], $_POST['email'], $_POST['website']);
$gebruiker->reactie_plaatsen($gastenboek, $_POST['reactie']);
echo 'Reactie toegevoefd.';
} else {
?>
<form method="post" action="index.php">
Naam: <input type="text" name="naam"><br />
E-Mail: <input type="text" name="email"><br />
Website: <input type="text" name="website"><br />
Bericht:<br />
<textarea name="reactie"></textarea>
<br />
<input type="submit" value="Reactie Plaatsen!">
<?php
}
?>
</div>
</body>
</html>


Zoiets werkt denk ik wel,,
Moet je zelf maar even kijken.

$gebruiker->reactie_plaatsen


Gebruiker en reactie zijn aparte objecten...
@steen,
Opzich wel,, maar aan de andere kant,,
Gebruiker is nu een soort controller van de reactie.
Opzich klopt het wel,,
Je bent zelf een gebruiker,,
JIJ plaatst de reactie.
Deze reactie doet simpelweg het gastenboek aanroepen en een reactie plaatsen.

Het kan dus wel.
Maar ik had zelf ook een andere manier gekozen.
Maar met OOP is er niet één goede manier,, zijn er veel meer,,
En nog veel meer foute manieren.
@Nico: ik ben het met steen eens, reactie_plaatsen() hoort geen method van de Gebruiker class te zijn. In de uitleg zoals jij hem geeft beschouw je een Gebruiker object niet zoals je zou moeten doen. Het Gebruiker object is alleen verantwoordelijk voor zichzelf en kan alleen zijn eigen eigenschappen beïnvloeden. Hij heeft er geen idee van hoe een bericht geplaatst moet worden...

Blanche schreef op 02.01.2010 23:37
@Nico: ik ben het met steen eens, reactie_plaatsen() hoort geen method van de Gebruiker class te zijn. In de uitleg zoals jij hem geeft beschouw je een Gebruiker object niet zoals je zou moeten doen. Het Gebruiker object is alleen verantwoordelijk voor zichzelf en kan alleen zijn eigen eigenschappen beïnvloeden. Hij heeft er geen idee van hoe een bericht geplaatst moet worden...



Daar ben ik het mee eens. Ik heb geprobeerd dit op te lossen, is de manier waarop ik dit doe juist?

http://pastebin.com/m284aa815

Ik heb het toevoegen van een reactie een static functie gemaakt van Reactie, omdat ik niet het idee heb dat dit bij Gebruiker hoort.. Het werkt wel, maar is het juist wat ik doe?
Nee, die static method staat daar absoluut niet gelukkig. Dit kun je al zien aan de parameters die geaccepteerd worden, een Gebruiker en een Gastenboek. Van die twee hoor een Reactie niets te weten en laat staan dat hij weet hoe hij ermee om hoort te gaan.

Het zou veel logischer zijn om de reactiePlaatsen() method van je Gastenboek class te gebruiken en die een Reactie en Gebruiker als parameter te laten accepteren. Het Gastenboek weet immers wel dat er een Reactie en Gebruiker moeten zijn en je kunt je ook voorstellen dat het Gastenboek weet hoe e.e.a. opgeslagen moet worden.

Reageren