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.
Maar waar instantieer ik dan een nieuwe Reactie, als reactiePlaatsen() van Gastenboek die als parameter opneemt?

Doe ik dat dan op deze manier?

http://pastebin.com/m1afeb0da

Hier maak ik een Reactie object buiten de klasses om, en voer het als parameter in bij de reactiePlaatsen() methode van Gastenboek.
Mooi om te zien dat mijn artikelen ook op PHPHulp.nl gelezen worden :D

Het in de praktijk brengen van de code heb ik opzettelijk een beetje aan de lezer overgelaten, ik houd er namelijk niet van om alles voor te kauwen. Hoe dan ook, het gebruikte artikel is een onderdeel van 9 artikelen over het OOP gastenboek. De latere artikelen gaan dieper in op hoe het verder in praktijk te brengen. Zo wordt bijv. ook het MVC principe later in de tutorials uitgelegd.

Ik las hierboven ook een bericht dat je in PHP altijd procedurele code moet gebruiken ook als je OOP programmeert. Dit is niet specifiek voor PHP, je hebt altijd normale commandos in je code, ook in je klassen, gewoonweg omdat er anders niets gedaan kan worden.

De keuze om het reactie_plaatsen() in de gebruiker klasse te plaatsen is inderdaad ook niet de beste keuze. De gebruiker heeft niets te maken met reacties plaatsen, dus dat zou eigenlijk een save() methode moeten zijn van de reactie klasse of een reactie_plaatsen methode van de Gastenboek klasse.
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.


Waarom niet? Jij klikt toch ook met je muis op de knop "Bericht plaatsen"? Als je het form met de tekst er in laat staan gaat er niks gebeuren hoor.
Producted schreef op 09.01.2010 16:55
[quote='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.


Waarom niet? Jij klikt toch ook met je muis op de knop "Bericht plaatsen"? Als je het form met de tekst er in laat staan gaat er niks gebeuren hoor.[/quote]

Het gaat hier over OOP, ik vermoed dat jij dat nog niet kent.
"Gebruiker" class kan je in dit geval misschien beter zien als "Identiteit", want het is een behoorlijk passief object. Een actief object gebruiker-object maken heeft niet zoveel zin.

Daarnaast, je zegt het zelf al: de gebruiker klikt op de knop. Dat op de knop klikken is al een onderdeel van de handeling "reactie plaatsen", maar je code rijkt niet zover (die begint pas wanneer de knop ervoor zorgt dat het formulier wordt verstuurd, dat Apache wordt aangeroepen, en dat je code wordt gestart) dus die actie kan je gewoon niet goed modelleren in dit geval.

Misschien wel in een testcase trouwens, dan zou zo'n method op zich nog wel kunnen wanneer je de gebruiker automatiseert.
Yearupie schreef op 09.01.2010 17:12
[quote='Producted schreef op 09.01.2010 16:55'][quote='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.


Waarom niet? Jij klikt toch ook met je muis op de knop "Bericht plaatsen"? Als je het form met de tekst er in laat staan gaat er niks gebeuren hoor.[/quote]

Het gaat hier over OOP, ik vermoed dat jij dat nog niet kent.[/quote]

Omdat ik niet actief/nieuw ben op phphulp, betekent het niet dat ik nieuw ben met PHP. 8-)
@Producted: je reactie doet wel vermoeden dat je niet inziet waar het hier om gaat. Het formulier heeft in dit geval vrij weinig met het onderwerp te maken omdat het hier gaat om de code die bijvoorbeeld de verwerking van een formulier op zich neemt.

De reactie_plaatsen() method verzorgt dan ook niet de weergave van het benodigde formulier, maar juist (een deel van) de afhandeling ervan...
Zoals al wordt aangegeven, heeft het plaatsen van de reactie inderdaad weinig met het formulier te maken. Dat is op een veel te laag / technisch niveau gedacht. Het idee van OOP is dat je op een hoger niveau denkt en de vaste dingen binnen je programma probeert te vangen binnen objecten.

Waarschijnlijk is het beter om een methode save() in de Bericht klasse te maken dan een bericht_plaatsen in de gebruikersklasse. Zoals ik ook al aangegeven heb, wordt dit in de latere artikelen nog verandert. De reden dat het nu zo zit is omdat het een illustratie is van hoe je uit een beschrijving van je systeem je ontwerp kan halen. Natuurlijk zijn er vervolgens verschillende manieren om het te implementeren waarvan er ook meerdere goed zijn vanuit een OOP oogpunt.

Reageren