login  Naam:   Wachtwoord: 
Registreer je!
 Forum

waarom classes?

Offline Martijn - 30/11/2008 17:00
Avatar van MartijnCrew PHP oke, ik voel me een beetje stom om te vragen waarom, maar:

Waarom classes? Ik heb dr naar gekeken en de basic's snap ik wel, maar ik zie dr het voordeel niet zo van.... Je kunt met wat basic php en een functie ook heel veel doen...

Ik zou graag een uitleg hebben over waarom, en situaties die eigenlijk alleen maar te doen zijn met classes, het liefst met een klein beetje code.

25 antwoorden

Gesponsorde links
Offline Aar - 30/11/2008 17:08
Avatar van Aar PHP interesse - Makkelijk om in team verband mee te werken
- Herbruikbaar
Offline Martijn - 30/11/2008 17:14
Avatar van Martijn Crew PHP teamverband als in meer mensen? Dat kan ook met een functie en herbuiken ook..
Offline lasdesigner - 30/11/2008 17:20 (laatste wijziging 30/11/2008 17:20)
Avatar van lasdesigner PHP beginner Een voorbeeld van een classe die ik gebruik:

  1. <?php
  2. class User {
  3. protected $_vacature = null;
  4. protected $_validator = null;
  5. public $_user = false;
  6. public $_userId;
  7.  
  8. public function __construct() {
  9. $this->_vacature = new Vacature;
  10. $this->_validator = new Validator;
  11.  
  12. $userId = $this->_validator->checkSession(1);
  13. if(is_numeric($userId)) {
  14. $this->_user = true;
  15. $this->_userId = $userId;
  16. }
  17. }
  18. ?>

En dan kan ik dus checken:
if($kandidaat->_user === true ) { echo 'ingelogd'; } else { echo 'niet ingelogd'; }

Ik kan op deze manier de taal gemakkelijk aanpassen (stel ik wil het ook in het engels/frans/duits). Ik kan gemakkelijk zaken toevoegen/verwijderen/aanpassen. Het is overzichtelijk.

Allemaal voordelen.
Offline nemesiskoen - 30/11/2008 17:28
Avatar van nemesiskoen Gouden medaille

PHP expert
Ok, check dees (geen php):

stel ik wil een lijst van alle topics waar een lid ooit heeft gepost:
  1. var topics = Lid.Topics;

Stel ik wil een lijst van alle topics die onder dezelfde categorie vallen:
  1. var topics = currentTopic.Category.Topics;

Stel ik wil een lijst van de categorien die onder dezelfde category vallen als een bepaald topic:
  1. var categories = currentTopic.Category.Parent.Categories;


Hoe leest dat tegenover queries a la:
  1. select c.* from categorien c, categorien c2, categorien parentC WHERE c2.id = (select categoryId from topics where id = JE_TOPIC_ID_HIER) AND c2.parentCat = parentC.id AND c.parentCat = parentC

en waarschijnlijk is die query nog zo fout als het maar kan:-) niet getest, don't bother... want een deftig systeem doet dit allemaal voor jou..

Ik kan je nog honderd andere redenen geven maar hierboven is een captain obvious reden... readability
Offline Martijn - 30/11/2008 19:23
Avatar van Martijn Crew PHP ik eh, hmmnee. Ik snap de query zo ongeveer wel, maar trek niet echt een link tussen dat en de class dingies...
Offline vinTage - 30/11/2008 19:38
Avatar van vinTage Nieuw lid Ik ga met je mee DeviourSoul, ik vind classes gewoon stierenpoep.

Natuurlijk is het handig als je predefined code hebt(, die je evengoed in een file kwijt kan met functies).

Daarnaast is een class vaak VEEL te uitgebreid en kan dingen voor je regelen die totaal niet van toepassing zijn.
Nu weet ik niet of dat iets uitmaakt qua bandwidth, omdat het serverside script is, maar 500 regels code versus de 4 nodige regels code lijken mij ook geen nuttige bijdrage.

En als nagel op de kop, copyrights...
Lang geleden heb ik eens een artikel gelezen over het hergebruik van scripts, daarin stond TOEN dat je dus script geschreven voor een bepaalde client uniek is/moet zijn.

Dan heb je dus je verschillende licences types, maar om een map met premade code te verkopen voor veel geld vind ik behoorlijk naabs over komen en zou zelf dus maar éénmalig afnemen bij zo'n develloper.

Per project geschreven classes zijn imo helemaal overkill dus, want het herbruikbare is dan nog verder weg te zoeken.

Al met al weet ik niet hoe eea te omschrijven, maar mij zie je geen class schrijven 

Offline nemesiskoen - 30/11/2008 20:00
Avatar van nemesiskoen Gouden medaille

PHP expert
Citaat:
ik eh, hmmnee. Ik snap de query zo ongeveer wel, maar trek niet echt een link tussen dat en de class dingies...

zegt vooral iets over jou é
Offline Kr4nKz1n - 01/12/2008 09:07
Avatar van Kr4nKz1n Onbekend
vinTage schreef:
Ik ga met je mee DeviourSoul, ik vind classes gewoon stierenpoep.

Natuurlijk is het handig als je predefined code hebt(, die je evengoed in een file kwijt kan met functies).

Daarnaast is een class vaak VEEL te uitgebreid en kan dingen voor je regelen die totaal niet van toepassing zijn.
Nu weet ik niet of dat iets uitmaakt qua bandwidth, omdat het serverside script is, maar 500 regels code versus de 4 nodige regels code lijken mij ook geen nuttige bijdrage.

En als nagel op de kop, copyrights...
Lang geleden heb ik eens een artikel gelezen over het hergebruik van scripts, daarin stond TOEN dat je dus script geschreven voor een bepaalde client uniek is/moet zijn.

Dan heb je dus je verschillende licences types, maar om een map met premade code te verkopen voor veel geld vind ik behoorlijk naabs over komen en zou zelf dus maar éénmalig afnemen bij zo'n develloper.

Per project geschreven classes zijn imo helemaal overkill dus, want het herbruikbare is dan nog verder weg te zoeken.

Al met al weet ik niet hoe eea te omschrijven, maar mij zie je geen class schrijven 
Ben het op zich met je eens, ik zelf vind classes vaak ook niet het handigst en zeker niet het makkelijkst. Zelf probeer ik wel classes te gebruiken, juist omdat er steeds meer OO-gericht wordt gescript.

Ook heb ik en dan met name op PHPHulp veel scripts gezien waarbij een classe echt goed wordt gebruikt, helaas zijn dit vaak wel codes waaruit een beginner niks kan opmaken, omdat je van de ene kant naar de andere kant wordt geschopt. Het uitstippen is dus erg vaak lastig, maar het is erg handig in gebruik. Ook zijn ze vaak handig toe te passen, juist omdat alles in 1 bestandje staat en je het met een paar regels kan ophalen (ligt aan de code).

Ook is het handig omdat de classe je gegevens 'onthoudt'. Je hebt een database classe. In deze classe regel je de SELECT's, DELETE's, INSERT's en UPDATE's (de meest gebruikte), al deze verschillende acties hebben hun eigen methode (allemaal een eigen functie).
  1. class ClsDb
  2. {
  3. public function insert($insert)
  4. {
  5. }
  6.  
  7. public function delete($delete)
  8. {
  9. }
  10. //etc.
  11. }

Ook maak je een methode om het uit te voeren
  1. public function query($query)
  2. {
  3. }

In deze methode voer je de query uit, hoe? Door in de INSERT (etc.) methodes een return te maken naar de query method.

  1. public function insert($insert)
  2. {
  3. return $this->query($insert);
  4. }

Nu kun je een variabele bovenaan in de class maken en zeggen dat het een array is
  1. private $queries = array();

In de query method kun je nu dus elke query in de array neerzetten. Dit kan handig zijn om aan het einde van de pagina de queries te tellen, of om te controleren welke queries zijn uitgevoerd. Ook kun je dubbele queries er uit halen.

Hoe je dubbele queries er uit haalt?
Om de status van een lid (vaak jezelf) op te halen, heb je vaak een query nodig. Maar het het resultaat heb je vaak, op meerdere plekken op 1 pagina nodig, terwijl deze in een classe staat, bv. ClsMembers.

Wat je kunt doen je het resultaat dus in een variabele zetten, en telkens als je de status wilt weten roep je deze variabele op.

Dit is natuurlijk een klein voorbeeldje, en misschien denk je nog wat onzinnig. Maar ik heb het aantal queries op mijn site drastisch zien verminderen juist doordat je het resultaat 'bewaard'.
Offline Flex1986 - 01/12/2008 13:37
Avatar van Flex1986 Gouden medaille

Senior Member
Classes dien je alleen te gebruiken waar het nut heeft. Dit is binnen het OO verhaal aangezien je zonder classes niet OO kan programmeren. En als je bijvoorbeeld een extra laag wil toepassen tussen bijvoorbeeld je DB en je Script.

Voorbeeld zakelijke gebruiker maakt basis webapp die steeds uitgebreider wordt door de uitbreidingen kan MySQL het niet meer goed afhandelen dus wil je overstappen op MSSQL een mooie database class zorgt ervoor dat je de config aanpast. MySQL importeert in MSSQL en je bent klaar. Gebruik je zo'n klasse niet zul je alles na moeten lopen om het aan te passen. Beetje nutteloos veel werk.

Bovenstaande is uiteraard alleen van toepassing op grote zakelijke projecten.

Ik zelf moet wel toegeven dat ik geen classes gebruik binnen PHP omdat ik het totaal nutteloos vindt omdat PHP zelf al niet OO is waardoor je onnodig veel moet klooien om een mooie OO app te maken.
Offline marten - 01/12/2008 13:45
Avatar van marten Beheerder Op dit moment zou ik eerst me bezig gaan houden met sinter classes. 
Offline Appie_Dijk - 01/12/2008 14:18 (laatste wijziging 01/12/2008 14:18)
Avatar van Appie_Dijk Lid
marten schreef:
Op dit moment zou ik eerst me bezig gaan houden met sinter classes. 


helemaal mee eens ;) 
Offline Martijn - 01/12/2008 14:20
Avatar van Martijn Crew PHP
marten schreef:
Op dit moment zou ik eerst me bezig gaan houden met sinter classes. 

hehe
Offline Sitebase - 01/12/2008 14:23
Avatar van Sitebase PHP expert Als ik op het werk zonder classes(OOP) mijn PHP applicaties zou schrijven dan weet ik zeker dat ik binnen de week dik in de problemen kom. OOP helpt niet alleen bij het overzichtelijk houden van je applicatie maar helpt ook om de mogelijkheid te houden voor eventuele uitbreidingen en aanpassingen. Je moet natuurlijk zien waar je classes gaat gebruiken/schrijven. Een fout die veel beginnende OOPers maken is dat ze denken dat alles in classes geprogrammeerd worden.

Je moet klasses zien als groepen van functies die iets met elkaar te maken hebben. Hierdoor maak je ook een duidelijke structuur in je applicaties doordat je code die bijeen hoort gaat groeperen. Zo weet je als je iets aan de database connectie wilt wilt wijzigen dat je dan in de database classe moet gaan zien.

Voorbeeld:
Je hebt een website gemaakt en deze is het laatste jaar zeer groot geworden en om de executie tijd van je scripts te verminderen wil je een cache mogelijkheid inbouwen voor de queries.

Als je zonder klasses hebt gewerkt dan zit je dik in de problemen want je moet overal in je code gaan zoeken naar plaatsten waar je queries uitvoert en hier overal een cache mogelijkheid rond bouwen.

Als je wel met klasses hebt gewerkt dan open je de database klasse en schrijf je op een plaats die extra cache mogelijkheid en op 5 minuutjes heb je de klus geklaard.

Dit is maar een klein voorbeeldje van dingen die ik elke dag op mijn werk tegen kom. Bij de mensen die nog altijd zeggen dat klasses overbodig zijn stel ik de vraag of ze de materie wel goed begrijpen.

Offline Ontani - 01/12/2008 14:31
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Ik snap de denkwijze van DeviourSoul wel. Wat Wim hier net als voorbeeld geeft zou ook met een file vol functies kunnen.

Als jij een functie hebt. GiveMeLatestUsers(); en daar voer je de query uit die je wilt kan je naderhand nog evenzeer caching in die functie steken zonder ook maar 1 class te gebruiken.
Offline Stijn - 01/12/2008 14:56
Avatar van Stijn PHP expert
wmp schreef:
Je moet klasses zien als groepen van functies die iets met elkaar te maken hebben.
Een klasse is iets dat eigenschappen heeft (properties) en de methodes doen iets met die eigenschappen. Je moet geen klasse maken op basis van functies die je maar eventjes groepeert.

Citaat:
Ik zou graag een uitleg hebben over waarom, en situaties die eigenlijk alleen maar te doen zijn met classes
Je kan in iedere situatie OOP gebruiken.

Nog een reden om OOP te gebruiken is data patronen als MVC, Decorator patroon, singleton, ...
Offline nemesiskoen - 01/12/2008 15:35 (laatste wijziging 01/12/2008 15:35)
Avatar van nemesiskoen Gouden medaille

PHP expert
Omdat concepten de werkelijkheid representeren. Data doet dit niet. Ja er zijn kwieten die van een datamodel beginnen en dan klassen neertoveren. Maar als je vertrekt van een deftig conceptueel domeinmodel, en je design ook nog eens goed doet (zoals god (ja met een kleine letter want ik bedoel niet de Heer) het wilt) dan krijg je deftige klassen en deftige code die herbruikbaar is.
Offline cloudstrife - 01/12/2008 20:08
Avatar van cloudstrife PHP beginner Als je een klein projectje maakt kan ik er best in komen dat je het licht niet ziet in het gebruik van classes en gans die OOP shit.

Maar maak eens een groot project (en dan wel een echt groot project) zonder classes, zonder enig design pattern en je loopt na lange tijd zeker en vast verloren.

Classes laten je o.a. toe te werken met lagen om zo verantwoordelijkheid te verdelen en inzicht te bewaren in een programma. OOP laat je toe om heel snel als bv beginnend programmeur inzicht te krijgen in een programma. En dan vergeet je nog de handige zaken zoals overloading, incapsulatie, overerving (niet teveel natuurlijk) en het gebruik van interfaces.
Offline darkdrag0n20 - 01/12/2008 22:46
Avatar van darkdrag0n20 Nieuw lid simpel voor het overzicht.  
Offline Aar - 01/12/2008 23:41 (laatste wijziging 01/12/2008 23:42)
Avatar van Aar PHP interesse
DeviourSoul schreef:
teamverband als in meer mensen? Dat kan ook met een functie en herbuiken ook..

Je werkt aan stukken code die makkelijk aan te passen en te beheren is.
Kan ook met 1 functies, maar wil je nog met functies werken??
Liever met classes als je meerdere functies categoriseert.

En ik vind Class-mis veel leuker dan Sinter-class  
Offline Diko - 01/12/2008 23:50
Avatar van Diko PHP interesse Als je beetje bekend bent met normaliseren met databases kun je classes/OOP op een soortgelijke manier benaderen.

Waarbij een class een verzameling bij elkaar horende attributen is. Waarbij een attribuut in slechts 1 klasse zit. Als er iets aan het attribuut veranderd hoef je dit op maar 1 plaats te veranderen.

Offtopic: Een Class-mis actie organiseren om mensen te motiveren om de script library van sima uit te breiden?
Offline Kr4nKz1n - 02/12/2008 08:55
Avatar van Kr4nKz1n Onbekend Class-mis actie goed idee 

Alleen zullen dit niet al te veel scripts worden ben ik bang.
Offline nemesiskoen - 02/12/2008 09:38
Avatar van nemesiskoen Gouden medaille

PHP expert
Citaat:
Als je beetje bekend bent met normaliseren met databases kun je classes/OOP op een soortgelijke manier benaderen.

Hele enge zin
Offline Kr4nKz1n - 02/12/2008 10:34
Avatar van Kr4nKz1n Onbekend Tja, iedereen kijkt anders op tegen OO en ik zie al wel dat de meningen erg verdeelt zijn over hoe te gebruiken en vooral hoe uit te leggen 
Offline Flex1986 - 02/12/2008 10:47 (laatste wijziging 02/12/2008 10:47)
Avatar van Flex1986 Gouden medaille

Senior Member
Ligt meer aan welke modelerings techniek je gebruikt. OO zelf is aardig straight forward. Bij een goede modeleer techniek kunnen er geen verschillende gebruiksmethode zijn. Aangezien alles staat vast gesteld en je dient te werken volgens die regels anders heeft het modelleren sowieso geen zin.

Iemand die het normaliseren van z'n database vertaald naar zijn OO programma is al fout bezig. Aangezien je dan verkeerd om aan het werk bent.

Zoals als ik het geleerd heb en nog steeds toepas gaat het volgens de volgende stappen.

1. Use cases
2. Domein model
3. Klassendiagram
4. EER model
5. Relationeel Representatie model

Daarna ga je kijken of je database nog verder te normaliseren valt. Maar als je de stappen goed toepast is dit meestal niet nodig. Bovenstaande lijstje is van toepassing op een database.
Offline Diko - 02/12/2008 12:21
Avatar van Diko PHP interesse Uit mijn OOAO dictaat: (Object Orientatie, Analyse en Ontwerp)

Citaat:
Kenmerken van Object Oriëntatie
1. Voeg de data m.b.t. een ding en de functies die deze data
bewerken samen tot één object

– Dit wordt Encapsulation (inkapseling) genoemd
– Wijzigingen hoeven dan maar op één plaats te worden verwerkt
2. Onderken objecten op basis van de fysieke werkelijkheid
– Dingen/zaken in de werkelijkheid moet je terugzien in de software
– Analyseer de werkelijkheid en bepaal zo de logische structuur
van de software
3. Objecten kunnen functies bij elkaar aanroepen en zo het
systeem als een geheel laten werken

4. Zorg ervoor dat andere objecten niet kunnen of hoeven weten
hoe een object intern werkt

– Dit wordt Information hiding genoemd
– Wijzigingen binnen één programmadeel (object) leiden dan niet tot
wijzigingen in andere programmadelen


@Flex: Ik had het dan ook over normaliseren;) Bij OOP zou je groepen attributen die meerdere malen voorkomen in een eigen klasse zetten. Oftewel; zorgen dat de eigenschappen van een object maar 1x ergens staan == geen redundantie.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.287s