Stel ik maak een algemene class om data in op te slaan. Vervolgens wil ik ook een class maken om configuratiegegevens in op te slaan. Daar kan ik eigenlijk perfect de algemene Data class voor gebruiken.
Nu vraag ik me iets vreemds af. Wat is nu wijsheid. Om voor de configuratie gebruik te maken van de algemene data class? Dus:
<?php
$config_settings = new Data();
?>
Of is het slimmer om toch een aparte Config class te maken die de Data class extend?
<?php
class Config extends Data {
}
$config = new Config();
?>
Nu hebben we wel een aparte Config class, maar deze is wel leeg. Er staan geen methods is. Wat zou jullie voorkeur hebben?
Omdat? Als je zegt dat iets een slecht idee is, dan is het wel prettig als je ook aangeeft waarom.
Die data class heeft gewoon wat algemene methods add,get,has,delete. Die kan ik bijv. ook gebruiken om paden in op te slaan, of routes en dat soort dingen. Een container class zeg maar.
Ik kan ook voor alle classes een aparte container class maken met dezelfde functies, maar dat lijk me in ieder geval niet echt slim.
Omdat? Als je zegt dat iets een slecht idee is, dan is het wel prettig als je ook aangeeft waarom.
Dan zou ik het wel prettig vinden als je eerst op m'n vragen antwoord voor je met zulke reacties gaat afkomen. Zo kan ik namelijk afleiden of het een goed, of, slecht idee is. Maar op het eerste zicht lijkt dit op een slecht idee. Vandaar mijn bericht.
Toevoeging op 09/03/2014 15:19:51:
Ozzie PHP op 09/03/2014 14:34:05
Die data class heeft gewoon wat algemene methods add,get,has,delete. Die kan ik bijv. ook gebruiken om paden in op te slaan, of routes en dat soort dingen. Een container class zeg maar.
Zo zou je het kunnen zien. Je hebt een class property $data en dat is een array. Wil je iets uit die array hebben dan krijg je dus $config->get('foo').
>> Dan zou ik het wel prettig vinden als je eerst op m'n vragen antwoord voor je met zulke reacties gaat afkomen. Zo kan ik namelijk afleiden of het een goed, of, slecht idee is.
Dan moet je niet gelijk al zeggen dat het slecht is :) Krijg bijna een hartverzakking ;)
Waarom wil je een aparte class als je ook gewoon een array kunt returnen? Jij, die altijd zo opgefokt bent door performance (neem dit niet persoonlijk ;-))! Dit zal je script namelijk vertragen als je al je arrays gaat vervangen met classes.
Ozzie PHP op 09/03/2014 15:22:58
Dan moet je niet gelijk al zeggen dat het slecht is :) Krijg bijna een hartverzakking ;)
Nee, gewoon een array gebruiken dat is toch geen OOP :-/
Je gebruikt een container om meerdere values of objecten op te slaan. Daar gebruik je geen array voor. Misschien bij procedureel programmeren, maar bij OOP echt niet.
Nooit een array gebruiken? Oei, wat een veel te veel doorgedrukte object gedachte heb je. Het gaat bij OO niet om zoveel mogelijk objecten hebben, dat begrijp je hopelijk? Het gaat in OO om objecten te gebruiken waar nodig. Om het sterker te maken: zo min mogelijk objecten met de grootste SRP, dat is het doel van OO.
Oke... dit is nu iets anders, je wilt nu een registry class maken?
class Config extends Data {
Dan zou ik Config implementeren ArrayAccess. Je wilt namelijk meestal voor ieder "data-object" een andere implementatie.
Toevoeging op 09/03/2014 15:34:18:
Wouter J op 09/03/2014 15:30:53
Nooit een array gebruiken? Oei, wat een veel te veel doorgedrukte object gedachte heb je. Het gaat bij OO niet om zoveel mogelijk objecten hebben, dat begrijp je hopelijk? Het gaat in OO om objecten te gebruiken waar nodig. Om het sterker te maken: zo min mogelijk objecten met de grootste SRP, dat is het doel van OO.
Laten we ook al dan direct strings afschaffen, is ook geen OO ;-)
Dat zei ik dus niet :-/
Ik bedoel dat een array geen vervanging is voor een class.
We gaan toch niet dit doen $foo = $config['foo'], maar wel dit $foo = $config->get('foo'). Of ben ik nou gek?
>> Oke... dit is nu iets anders, je wilt nu een registry class maken?
Zo zou je het kunnen noemen als het dat makkelijker maakt om te begrijpen. In feite wil ik een class die bij elkaarhorende values/objecten vasthoudt. Ik wil bijv. een class die al mijn paden vasthoudt, en als ik dan het pad naar de images nodig heb, dan doe ik $paths->get('images').
>> Dan zou ik Config implementeren ArrayAccess. Je wilt namelijk meestal voor ieder "data-object" een andere implementatie.