get('key') of __get ?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

31/03/2012 01:58:09
Quote Anchor link
Hallo,

Ik betrap me erop dat ik de laatste tijd steeds meer de magische __set en __get functies aan het gebruiken ben, terwijl ik dat vroeger nooit deed. Ik wist toen ook nog niet hoe het werkte.

Inmiddels begin ik een soort "liefde" te voelen voor die 2 magische functies en ik ben benieuwd of jullie ze ook gebruiken, en zo ja... gebruik je ze dan af en toe, of vaak, of altijd?

Waarom ik het graag gebruik heeft 2 redenen. Ik vind het mooier: ik doe liever dit $path = $paths->mypath dan dit $path = $paths->getPath('mypath'). De 2e reden is dat ik in plaats van 10 verschillende get functies nog maar 1 functie nodig heb. Nu ben ik benieuwd of er dus meer mensen zijn die vaak van de __set en __get functie gebruik maken. Ik zie zelf alleen maar voordelen, maar wellicht zijn er ook nadelen aan het gebruik van de __set en __get functies? Kortom, ik ben benieuwd hoe jullie met deze functies omgaan en of jullie ze vaak gebruiken.
 
PHP hulp

PHP hulp

22/05/2024 04:20:38
 
Mark PHP

Mark PHP

31/03/2012 04:21:52
Quote Anchor link
Niet gebruiken. Leesvoer, vooral de "What’s broken?" sectie.

Lang verhaal kort - magie gaat ten koste van duidelijkheid.
 
Ozzie PHP

Ozzie PHP

31/03/2012 14:08:08
Quote Anchor link
Hmmm... de 2 "nadelen" zoals die staan beschreven is dat het traag zou zijn (zelf nooit gemerkt) en dat auto-aanvullen niet werkt. Dat laatste kan zo zijn, maar ervaar ik zelf niet als lastig.

Zijn er nog meer mensen die regelmatig de __get en __set functie gebruiken? Ik neem aan dat ik toch niet de enige ben?
 
Wouter J

Wouter J

31/03/2012 14:16:24
Quote Anchor link
Ik gebruik het niet vaak. Dit omdat je dan totaal geen controle meer hebt over welke properties readable en welke niet readable zijn. Je maakt ze in feite allemaal readable, iets waarvan ik niet hou.
 
Ozzie PHP

Ozzie PHP

31/03/2012 14:24:29
Quote Anchor link
Hoe bedoel je dat Wouter? Je hoeft je properties niet readable te maken.

Stel je wil in je controller aangeven welk css bestand gebruikt moet worden. Je kan dan zoiets doen als dit: $this->setCssFile('main.css');

Maar je kan het ook via de __set functie doen:

$this->css = 'main.css';

Dit vind ik wel chique.

In de __set functie zou je den een switch op de key kunnen maken. Als de key css is dan wordt het bestand opgeslagen in de private property $_css_files.

Dat is een beetje wat ik bedoel.

Ander voorbeeld, stel jij typt deze url in: www.wouterj.nl/ik/ben/wouter

Wouter zou nu het argument zijn dat hoort bij de parameter "naam".

Als je nu in de controller zit en je wilt de naam opvragen, dan zou je dat zo kunnen doen:

$naam = $this->getParameter('naam');

Maar hoe mooi is het als je gewoon dit kunt doen:

$naam = $this->naam;

Ik vraag me dus af of er meer mensen zijn die op deze manier werken. Ik vind het namelijk wel chique, overzichtelijk en handig.
 
Mark PHP

Mark PHP

31/03/2012 18:40:43
Quote Anchor link
Ozzie PHP op 31/03/2012 14:08:08:
Hmmm... de 2 "nadelen" zoals die staan beschreven is dat het traag zou zijn (zelf nooit gemerkt) en dat auto-aanvullen niet werkt. Dat laatste kan zo zijn, maar ervaar ik zelf niet als lastig.

Ozzie PHP op 31/03/2012 14:24:29:
In de __set functie zou je den een switch op de key kunnen maken. Als de key css is dan wordt het bestand opgeslagen in de private property $_css_files.

Daar ga je al, zodra je in __set gaat checken op keys wordt het allemaal nog langzamer. Dat je dat niet merkt is een zinloze opmerking, natuurlijk merk je het verschil niet tussen 50ms ipv 5ms, maar toch is het verschil 900%. En als je dat je hele applicatie door doet, wordt het verschil wél merkbaar.

Zodra je je bezig gaat houden met TDD zal je merken dat de magic methods niet werken. En auto aanvullen is erg belangrijk, zeker als je iets als een API Reference wil genereren. Genoeg redenen lijkt me zo.
Gewijzigd op 31/03/2012 18:41:14 door Mark PHP
 
Ozzie PHP

Ozzie PHP

31/03/2012 19:09:36
Quote Anchor link
Ik zeg ook niet dat je het overal zou moeten toepassen, maar op sommige plakken is het wel heel handig. (Wat is TDD?)
 
Wouter J

Wouter J

31/03/2012 23:39:50
Quote Anchor link
TDD is Test Driven Development, dit wordt in PHP vaak gedaan door Unit Testing in samenwerking met PHPUnit. TDD is een geweldig goede manier om tot een applicatie te komen, Symfony is hier bijv. door opgebouwd.
 
Ozzie PHP

Ozzie PHP

31/03/2012 23:42:13
Quote Anchor link
Ah, oke... thanks.
 



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.