Hoe zouden jullie de functions noemen? En hoeveel classen zou ik moeten maken??
Dit is geen goed begin, je bent er namelijk nog helemaal niet aan toe om over namen voor methods na te denken of inzicht te hebben in de hoeveelheid klasses die je gaat krijgen (dat merk je namelijk vanzelf wel).
Nee, begin met het krijgen van inzicht in de objecten (de zelfstandig naamwoorden uit Erik's tut) die je in zo'n systeem terug ziet. Als je het hebt over een PM systeem zie ik bijvoorbeeld een Gebruiker en een Bericht. Vervolgens heb je nog iets nodig om een bericht van de ene gebruiker naar de andere te sturen, dus bijvoorbeeld een Bericht_Controller.
Verder zul je uiteraard een database nodig hebben om e.e.a. op te slaan, daarbij is het een aanrader om iets als PDO te gebruiken aangezien je dan direct in het OO sfeertje blijft. Het kan ook enkel met de mysql_* functies, maar de kans dat je dan - zeker als beginner - procedurele code met OO code gaat mixen, is levensgroot en dus geen aanrader.
Kortom, voordat je daadwerkelijk code kunt gaan schrijven, zul je eerst nog een aantal stappen moeten doorlopen. Bedenk welke objecten je hebt (klasses), wat die objecten voor eigenschappen hebben (properties) en wat die objecten moeten kunnen (methods).
ps. Wellicht overbodig maar toch nog even met betrekking tot de database. In mijn voorbeeld is de Bericht_Controller de enige klasse die met de database praat. Een Bericht of een User kan dat zelf namelijk niet, een Bericht kan zichzelf immers niet verzenden :)
Ik heb nu hetvolgende uitgedacht om maar even om de uitleg van branche in te gaan en die te gebruiken voor mij object
ik heb nu de volgende classes
- gebruikers
- berichten
- bericht_controller
Gebruikers
Ik heb de functions
- gebruiker_session
- gebruiker_vrienden
Berichten
Ik heb de functions
- bericht_inbox
- bericht_nieuw
- bericht_prullenbak
Bericht_controler
heb ik de functions
- bericht_verzenden
Zit ik zo goed op weg? Welke functions ben ik vergeten of horen er niet bij en wat moet nu precies private wezen en wat niet? Ik denk gebruiker private en de rest public maar zit ik zo goed? En moet ik nog met overerving werken endergelijke?
Een private functie mag je alleen vanuit de klasse zelf aanroepen en niet van buitenaf.
Stel dat jij bijvoorbeeld een bericht wilt verzenden vanuit de bericht controller, dan moet je met de "gebruikers functie" controleren of dat wel mag naar die gebruiker. Hiervoor is een extra functie in de gebruikersklasse, het gaat hier verder dus niet over het bericht, maar of de ene gebruiker naar de andere mag pm 'en.. (dit is een voorbeeld en is niet altijd van toepassing bij een PM systeem)
Maar dan moet je vanuit de bericht_controller class een functie uit de gebruikers class aanroepen. Deze kan dan niet private zijn.
Als je een reeks van functies hebt die binnen 1 class achter elkaar aangeroepen worden en waar je vanaf een andere class (of buiten de class) niet bij hoeft gebruik je de private optie. Stel dat je een controle inbouwt voor wat er in het bericht staat, welke ik (functienaam) nu even controleer_bericht noem:
- Je gaat de bericht controller aanroepen
- Deze gaat controleren of je een bericht aan die gebruiker mag sturen, je roept vanuit de controleer_bericht functie de functie vanuit de gebruikers class aan.
- Indien ja (true) dan gaat die het bericht controleren. Maar: vanuit de controleer bericht functie roep je (binnen dezelfde class dus) de bericht_verzenden functie aan. Deze wordt pas na alle controles aangeroepen, maar mag (omdat deze functie altijd komt als alle controles goed zijn gegaan) gewoon uit de controleer_bericht functie worden aangeroepen.
Omdat de bericht_verzenden functie alleen maar vanuit controleer_bericht wordt aangeroepen, mag je er een private functie van maken. Hij kan dan van buitenaf niet rechtstreeks worden aangeroepen en zo dwing je eigenlijk af dat die eerst de controle moet doorlopen alvorens je het bericht daadwerkelijk verzend.
Let ook op naamgeving: gebruikers is geen object. Een gebruiker is een object; gebruikers is een verzameling van objecten. In je klasse hoor je in principe maar bezig te zijn met 1 gebruiker. Zo ook bij berichten; je klasse heet Bericht, omdat je object maar 1 bericht bevat.
Je inbox (ook een object, die bijvoorbeeld een specialisatie is van een mailbox) kan dan weer een verzameling van Bericht-objecten bevatten.