Goeiemorgen,

Na vele tutorials gelezen te hebben over OO wil ik zelf wel eens een classe schrijven.

Nadat ik gister een tutorial over de denkwijze van OO van PHPerik heb gelezen ben ik gaan twijfelen. Hoe schrijf ik nou precies een goede classe.

Ik wil het volgende gaan uitwerken. Een pm systeem. (Of is dit te moeilijk?)

Hoe zouden jullie de functions noemen? En hoeveel classen zou ik moeten maken??

Groeten

EDIT

Kan ik ook beter gebruik maken van PDO of is mysql ook gewoon goed?
Wat versta je onder een mailbox? Een priveberichten stysteem, of een systeem om een POP/IMAP mailbox met IMAP-functions uit te lezen?
Priveberichten systeem. Ik denk dat een POP/IMAP nog te moeilijk is
Nog nooit een mailbox gemaakt maar het zou iets zijn van:


<?php
class mailbox($mail, $wachtwoord) {
	public $mail;
	private $wachtwoord;
	function __construct() {
		$this->mail = $mail;
		$this->wachtwoord = $wachtwoord;
	}
	
	function verzend_mail() {
	//verzenden
	}
	
	function ontvang_mail() {
	//ontvangen
	}
}
?>


Hoop dat je hier iets mee kan

Zie post van Blanche
Tnx,

Maar dit bedoel jij dus voor POP/IMAP?

Ik ga denk ik een prive berichten systeem maken, ik zal me begin post even aanpassen
Niels schreef op 29.12.2009 10:44
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 :)
@Blanche,

Dit is nou een antwoord wat ik wilde..

Hartelijk dank. Ik ga mezelf verdiepen in dit alles en ik houd jullie op de hoogte.

Eerst maar eens beginnen met PDO dan ;)

Bedankt voor de reacties
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?

Alvast bedankt
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.

Reageren