OOP in php toepassen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yorian

Yorian

09/11/2008 17:29:00
Quote Anchor link
Hoi,

Ik ben hier nieuw maar programmeer inmiddels al vrij lang in php. Momenteel ben ik bezig met het daadwerkelijk leren toepassen van OOP. Ik weet hoe classes werken, objecten, constrcutors etc. Ik maak er al een tijdje gebruik van. Alleen mijn objecten zijn nog niet netjes OOP geprogrammeerd, dat houd in dat mijn gebruikersclass in principe alles regelt wat er met een gebruiker te maken zou kunnen hebben, in plaats van dit netjes op te splitsen in meerdere classes.

Ik ben begonnen met het maken van een nieuw gebruikers systeem, dat een beetje volgens de OOP regels zou moeten gaan. Ik probeer om "concerns" te splitsen in aparte classes, mezelf niet te herhalen met code etc.

De naamgeving van mijn classes zijn nog niet ideaal (komt door een foute afspraak in het systeem, maar dit gaat nog wijzigen) de user class zou eigenlijk beter userController kunnen heten, en de userData class zou eigenlijk beter gewoon user kunnen heten.

Mijn opzetje (dat nog niet af is), is hier te vinden: http://web-develop.nl/user_oop.phps

Ik heb alles in 1 bestand gezet voor de leesbaarheid maar in het echt zijn dit natuurlijk meerdere bestanden.

Zouden jullie kunnen aangeven of ik op de goede weg ben, welke dingen ik beter anders kan doen etc. Wat opbouwende kritiek zeg maar.

Alvast bedankt!
 
PHP hulp

PHP hulp

05/01/2025 01:35:43
 
TJVB tvb

TJVB tvb

09/11/2008 18:41:00
Quote Anchor link
Eerste wat me opvalt is private, deze is alleen nodig als je zeker wilt zijn dat het niet vanbuiten je object aangeroepen kan worden (ook niet door objecten die erven van de class). Wil je er voor zorgen dat het niet door alles en iedereen gewijzigd kan worden dan is protected genoeg. Een class die dan erft van je class kan er dan nog bij.

Wat me ook opvalt is je naamgeving, soms begint de naam met een _ en andere keren niet. Ik zie niet echt duidelijk waarvoor dit verschil is.

Een autoload functie is misschien wel handig (zoals Zend Framework heeft) dit scheelt heel wat require regels in je methodes.

Je $register lijkt me het id van een register object, maak hier een statische class van, die hoef je niet steeds mee te geven (Dat is ook het id van een register object)

Je switch in de functie index van User heeft geen default, als ik het goed begrijp is dit een functie voor het afhandelen van request. Het lijkt me dat een default wel handig is (desnoods voor een 404 of het doorsturen naar een algemene pagina)
Je hoeft je dan ook nog niet druk te maken om niet ingevulde cases, die gaan dan lekker naar je standaard pagina.

Heb je ook een ontwerp van je gehele systeem?
 
Yorian

Yorian

09/11/2008 22:09:00
Quote Anchor link
Dank voor je opmerkingen, hier heb ik echt wat aan.

Ik heb voor private gekozen omdat ik overal lees dat je alles alleen via methods wilt kunnen aanpassen etc. Maar protected is waarschijnlijk ook wel genoeg.

Wat betreft de naamgeving, het idee was in eerste instantie om alle externe variabelen een underscore krijgen, maar dat is een beetje een rommeltje geworden.

Autoload functie is inderdaad wel een goed idee.

Als ik het register object statisch maak, dan moet ik het object wel aanpassen en $this vervangen door self:: volgens mij. Maar het is geen slecht idee. Ik zou dan overigens veel andere classes ook moeten vervangen.

Dat de switch geen default heeft is logisch, er wordt voor de switch al gecheckt of er een juiste waarde in de variabele zit. Dus die default wordt eigenlijk afgevangen door een if else (waarvan de else ontbreekt).

Ontwerp van het hele systeem heb ik niet echt, maar het komt er op neer dat via .htaccess naar de index.php gaat, die roept de router aan. De router kijkt in een tabel in de database of de url gevonden wordt en welke module daar aan vast zit. De module wordt dan geladen uit de directory controllers. En die regelt het in principe verder zelf.

Als jullie nog meer tips hebben hoor ik het graag!

Edit:
: Ik vraag me ook af of de manier waarop ik nu mijn controller in elkaar heb gezet (als taken verdeler vooral en aanstuurder van het proces) de juiste is. Want in een gebruikers systeem komen toch veel "acties" dus een kleine class zal het uiteindelijk ook niet worden. Maar dit klopt wel ongeveer zo?
Gewijzigd op 01/01/1970 01:00:00 door Yorian
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.