Why use OOP?
Pagina: « vorige 1 2 3 4 5 volgende »
Dan zou ik gaan voor Gastenboek en Reactie.
Nee deze hoeven elkaar niet te extende omdat er hele andere informatie instaat, de klasse gastenboek heeft namelijk een array met reacties erin en daar kan je alle info uithalen mocht dat nodig zijn.
Ik zou met minimaal twee klasses starten: Gastenboek en Bericht. Vervolgens ga je in deze klasses allerlei methoden opnemen waarmee je bijvoorbeeld je gastenboek kunt weergeven en berichten kunt toevoegen.
In je Gasteboek klasse zul je gebruik maken van verschillende instanties van de Bericht klasse, die de verschillende berichten voorstellen.
Niet helemaal aan de hand van dat van Thijs want ik ben het niet eens met het volgende:
Code (php)
1
2
2
# __Constructor
- Deze haalt alle reacties uit de database en maakt objecten aan en plaatst ze in reacties
- Deze haalt alle reacties uit de database en maakt objecten aan en plaatst ze in reacties
Ik denk juist eerder dat de constructor moet controleren of er $_GET waarden zijn geset dus of er een paginanummer enzo is geset.
En dat je daarna pas een functie maakt met het ophalen van de gegevens en die apart aanroept maar dat is mijn idee. Dus kan ook helemaal fout zijn :P
Gewijzigd op 01/01/1970 01:00:00 door Vincent
Ja daar had ik nog niet over nagedacht maar dat is inderdaad een betere oplossing om alleen de data op te halen die je nodig hebt om weer te geven.
Ik wil graag een eigen pagination class bouwen en ben nieuwsgierig naar de uitwerking van Vincent! Ik hou dit topic in de gaten!
Vincent schreef op 06.02.2008 12:28:
Ook niet. De constructor heeft helemaal niets met GET variabelen of andere globals te maken. Zorg ervoor dat je constructor de benodigde parameters accepteert en vul deze parameters pas in als je een instantie van je klasse aanmaakt. Pas op dat moment bepaal je welke variabelen je wilt gebruiken en of dat dus een GET variabele is of dat dat variabelen zijn die ergens anders vandaan komen.Ik denk juist eerder dat de constructor moet controleren of er $_GET waarden zijn geset dus of er een paginanummer enzo is geset.
Dus:
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
@Blanche: Ik vat je niet helemaal, "Parameters accepteert" wat bedoel je? En wat doet je voorbeeldje precies? Waarom doe je dit:
Gewijzigd op 01/01/1970 01:00:00 door Vincent
Die $this->display() roept de methode display() aan, deze methode print het hele gastenboek.
Vervolgens geeft de construtor de member $iPage (die je op regel 4 declareert) de opgegeven parameter als waarde:
Links van de = staat de member en rechts de parameter van de constructor.
Ten slotte een voorbeeldje waarin je in je constructor al de methode display() aanroept. Deze methode zou ervoor zorgen dat de berichten van de betreffende pagina geladen worden en weergegeven worden.
Maar goed, als dit al hocus pocus voor je is, stel ik voor dat je eerst eens op zoek gaat naar wat tutorials.
Plaats jij, Vincent, dat nu als object binnen een object?
Ik ben zelf nu deze tut aan het volgen en begin hem toe te passen op mijn paginatie:
Object Oriented Programming in PHP (theorie)
Best duidelijk uitgelegd allemaal!
ps. Een belangrijke regel die je wel moet onthouden en waar beginners vaak de fout in gaan, is dat klasses in principe geen data naar het scherm schrijven. In een klasse zul je dus ook (bijna) nooit een echo tegenkomen. De enige methoden waarin je dat zou kunnen zien zijn bijvoorbeeld display() methoden, maar het is maar de vraag of je dat zou willen gebruiken.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
white(fetchen){
echo $this->naam()
etc.
}
Zodra jij namelijk al vanuit je klasse gaat echoën, leg je de layout ook al in je klasse vast. En dat is nu juist wat je niet wilt. Je wilt dat je klasses zo algemeen mogelijk zijn en dus op verschillende manieren gebruikt kunnen worden.
Vincent schreef op 06.02.2008 15:39:
Wanneer ik de reacties echo heb ik dat toch nodig? bij zoiets:
white(fetchen){
echo $this->naam()
etc.
}
white(fetchen){
echo $this->naam()
etc.
}
Nee niet op die manier. In je constructor kan je alle gegevens ophalen en vervolgens objecten daarvan maken. En dmv een __toString methode kan je een foreach doen over al die objecten ( Reacties ) die je in een array hebt staan en vervolgens echoen.
Ik zou het tonen van het gastenboek trouwens niet onderdeel van de klasse zelf maken, maar dat buiten de klasse oplossen. Je kan een iterator in je Gastenboek-object bouwen om je Bericht-objecten eruit te plukken. Verder heb je alleen maar lees-toegang tot de eigenschappen van het gastenboek (titel, pagina-controller voor nummer) en berichten (naam, bericht) nodig. Als je dit buiten de klasse oplost heb je geen presentatie-onderdeel in je klasse en kan je hem zonder aanpassingen op meer plekken toepassen.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
public function __construct(){
$this->gegevens_controle();
}
Die moet ik dus zo laten en dan pas in die gegevens_controle dit:
public function gegevens_controle(){
if(isset($_GET['xdasdasd])){
//dit
}else{
//dat
}
}
Of heb ik je verkeerd begrepen?
In de klasse werk je alleen met variabelen/members die jij zelf aan deze klasse meegegeven hebt of bijvoorbeeld in de klasse gegenereerd of uit een database gehaald hebt.
Dat zou betekenen dat pagina een variable is die public is. Normaal gesproken gebruik je voor attributen private of protected. Je kunt ze dan wijzigen met het setter en getter functies
class gastenboek($ba,$ba) {
ofzoiets?
Jullie maken 't wel erg moeilijk :-P Lol
En wat maakt het in dit geval trouwens uit of ie public is?