getField i.p.v. getName
Dag mensen,
Ben bezig met het opzetten van een OOP website. Uiteraard heb ik meerdere database tabellen met gegevens. Nu kan ik voor elke column in een bepaalde table het volgende doen:
Maar is het niet veel handiger om dit te doen:
Graag jullie gedachten hierover...
Ben bezig met het opzetten van een OOP website. Uiteraard heb ik meerdere database tabellen met gegevens. Nu kan ik voor elke column in een bepaalde table het volgende doen:
Code (php)
Maar is het niet veel handiger om dit te doen:
Code (php)
Graag jullie gedachten hierover...
Gewijzigd op 16/01/2011 23:12:04 door The Ultimate
Als je met klassen werkt, is het dan niet de bedoeling dat je bij het opbouwen van de pagina je object inlaadt, en pas je db opnieuw contacteert als je iets verandert?
Zelfs zonder klassen is dat nog de bedoeling; iets veranderen kan toch pas met een nieuw request.
Maar Ultimate, beste kerel, middenin een foreach een return, dat loopt niet he.
Ik ben het met de essentie van je vraag eens. Als je voor elk veld een zelfde getter nodig hebt, kan dat best met de veldnaam als een parameter.
Let op 'zelfde'. Ik heb best objecten die sommige tabelvelden helemaal niet afgeven, of er stiekem eerst een bewerking op loslaten. Dan kun je __call gebruiken. Laten we afspreken dat je "veld" altijd opvraagt door $object->getVeld() te doen:
Maar Ultimate, beste kerel, middenin een foreach een return, dat loopt niet he.
Ik ben het met de essentie van je vraag eens. Als je voor elk veld een zelfde getter nodig hebt, kan dat best met de veldnaam als een parameter.
Let op 'zelfde'. Ik heb best objecten die sommige tabelvelden helemaal niet afgeven, of er stiekem eerst een bewerking op loslaten. Dan kun je __call gebruiken. Laten we afspreken dat je "veld" altijd opvraagt door $object->getVeld() te doen:
Jens V op 16/01/2011 23:20:46:
Als je met klassen werkt, is het dan niet de bedoeling dat je bij het opbouwen van de pagina je object inlaadt, en pas je db opnieuw contacteert als je iets verandert?
Bas Cost Budde op 16/01/2011 23:39:51:
Ik denk dat Jens bedoelt te zeggen dat je bij het instantieren van een object meteen alle mogelijke waardes uit de database in het object plaatst zodat je er de hele pagina bij kunt en dus niet telkens opnieuw een sql-query hoeft uit te voeren. Ik weet niet of dat de bedoeling is (lijkt me eigenlijk wel sneller) en hoe ik dat dan vorm moet geven. Tips zijn welkom.Zelfs zonder klassen is dat nog de bedoeling; iets veranderen kan toch pas met een nieuw request.
Bas Cost Budde op 16/01/2011 23:39:51:
Ja, je hebt ook helemaal gelijk. Die return hoort daar niet. Stom van me. Soms dan zit je zo vast in je gedachte. Het gaat in dit geval niet fout omdat het telkens om 1 waarde gaat maar dat maakt het inderdaad nog niet goed. Bedankt dat je me daarop hebt gewezen. Zal het aanpassen.Maar Ultimate, beste kerel, middenin een foreach een return, dat loopt niet he.
EDIT:
Ik dacht "dat pas ik wel even aan". Niet dus. Hoe kan ik onderstaande foreachloop nou het beste vervangen?
Code (php)
Bas Cost Budde op 16/01/2011 23:39:51:
Ok, ik zie wat je me probeert te zeggen. Kan ik deze call gewoon in mijn object-class plaatsen samen met mijn algemene fieldgetter en dan een veld opvragen d.m.v. $obj->getField()? En wat is het nut dan precies van deze __call()?Let op 'zelfde'. Ik heb best objecten die sommige tabelvelden helemaal niet afgeven, of er stiekem eerst een bewerking op loslaten. Dan kun je __call gebruiken. Laten we afspreken dat je "veld" altijd opvraagt door $object->getVeld() te doen:
Gewijzigd op 17/01/2011 10:35:35 door The Ultimate
* foreach: sja, wat wil je? Je query lijkt door de WHERE 1 record op te halen, klopt dat?
__call is een magische methode. Zoek maar op, is leuk. Hij gaat af wanneer je een methode op een object aanroept die je niet gedefinieerd hebt (of die niet bereikbaar is, dwz niet publiek, of indien uit een subklasse aangeroepen, private).
Je vraagt een veld 'huisnummer' op met $obj->getHuisnummer, zonder dat je die methode hoeft te schrijven. Hm, doe in dat geval ook nog even strtolower() bij de toekenning aan $prop; ik heb zelfs een methode die camelcase omzet in underscored, als volgt:
__call is een magische methode. Zoek maar op, is leuk. Hij gaat af wanneer je een methode op een object aanroept die je niet gedefinieerd hebt (of die niet bereikbaar is, dwz niet publiek, of indien uit een subklasse aangeroepen, private).
Je vraagt een veld 'huisnummer' op met $obj->getHuisnummer, zonder dat je die methode hoeft te schrijven. Hm, doe in dat geval ook nog even strtolower() bij de toekenning aan $prop; ik heb zelfs een methode die camelcase omzet in underscored, als volgt:
In plaats van die foreach kan je $result->fetchAssoc() oid gebruiken.
Quote:
Maar Ultimate, beste kerel, middenin een foreach een return, dat loopt niet he.
Waarom is een return binnen een foreach slecht? Als je een onbekend aantal elementen hebt - laten we zeggen dat het er heeel veel zijn - en de eerste van de elementen die iets speciaals heeft, is de uitkomst van je function... Wat is er dan perfecter dan een return in een foreach?
flatcamel wordt trouwens ook wel een slug genoemd. Of sluggen of slugifyen of zoiets.
Gewijzigd op 18/01/2011 00:23:56 door rudie dirkx
Rudie, mijn opmerking had een nauwere scope dan jouw wedervraag. Ultimate probeert iets dat hij op die manier niet goed uitdrukt.
Dan nog heb ik liever geen return in een foreach. Als je heel veel elementen ophaalt en er dan toch maar een behandelt, deugt je algoritme niet voor de taak onderhanden. (En je laat wel heel veel werk liggen voor de garbage collector, en als C-student had je een vette onvoldoende van me gekregen op een tentamen. Maar dat helemaal terzijde :) )
slug, wat is dat ook alweer? Ik kwam het tegen in een CMS, als een string die direct in de url gezet mag worden, in tegenstelling tot de productnaam die spaties en dergelijke ellende kan bevatten.
Dan nog heb ik liever geen return in een foreach. Als je heel veel elementen ophaalt en er dan toch maar een behandelt, deugt je algoritme niet voor de taak onderhanden. (En je laat wel heel veel werk liggen voor de garbage collector, en als C-student had je een vette onvoldoende van me gekregen op een tentamen. Maar dat helemaal terzijde :) )
slug, wat is dat ook alweer? Ik kwam het tegen in een CMS, als een string die direct in de url gezet mag worden, in tegenstelling tot de productnaam die spaties en dergelijke ellende kan bevatten.




