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?
Zoek eens op wat ArrayAccess is dan.
>> We gaan toch niet dit doen $foo = $config['foo'], maar wel dit $foo = $config->get('foo'). Of ben ik nou gek?

Als Data#get() geen meerwaarde toevoegt behalve het uit een array halen zou ik gewoon lekker $config['foo'] doen. Een klasse als dit is zinloos:
<?php
class Data
{
protected $data = array();

public function set($id, $data)
{
$this->data[$id] = $data;
}

public function get($id)
{
return $this->data[$id];
}

public function has($id)
{
return isset($this->data[$id]);
}
}
?>

En wat ArrayAccess hiermee te maken heeft is ook voor mij onduidelijk, dan ga je een object maken die om een array heen zit en die ga je vervolgens weer als array gebruiken. Leg mij dan eens het nut uit van dat object, raoul :P
Dat heb ik gedaan, maar ik zie het verband niet. Ook dat jij zegt dat ieder data-object een andere implementatie krijgt snap ik niet, want het is gewoon telkens dezelfde "container" waar je iets in opslaat. Hooguit kan ik me voorstellen dat er heel soms iets toegevoegd moet worden, maar over het algemeen kun je dus zeggen dat het een container is waarin je values of objecten opslaat. Zo zou je dus een "container" kunnen hebben voor paden, configuratiesettings, routes enz. Die containers houden dus respectievelijk meerdere paden, configuratiesettings, en route objecten vast, maar die container is altijd dezelfde.

Nu gaat het er mij dus om... ik heb dus zo'n algemene container. Stel dat ik die wil gebruiken om bijv. configuratiesettings in op te slaan, gebruik ik dan die algemene container? Of maak ik een nieuwe (lege) Config class die de algemene container extend?

Toevoeging op 09/03/2014 15:54:30:

@Wouter

>> Een klasse als dit is zinloos:

Mwa, dat vind ik niet. Ik werk liever met een container object dat andere values of objecten vasthoudt dan met een array. Bovendien kun je bij het gebruik van een array geen exceptions gooien.

Bovendien vind ik dit mooier...

<?php
$images = $this->container->get('paths')->get('images');
?>
... dan dit:
<?php
$paths = $this->container->get('paths');
$images = $paths['images'];
?>
Maar goed, wellicht is dat een kwestie van smaak.
>> Ik werk liever met een container object dat andere values of objecten vasthoudt dan met een array

Waarom? Wat voor toegevoegde waarde biedt dat ten opzichte van een array, behalve dat je het er mooier uit van zien? (gewoon uit interesse, je weet mijn mening over dit onderwerp toch al :P)
Woute, ik snap het niet. Jij bent altijd degene die zegt dat je alles in classes moet stoppen. Nu doe ik dat, is het weer niet goed?

P.s. wat is precies een element in een array? Is dat hetzelfde als een value, of is het de combinatie van key en value?
>> Jij bent altijd degene die zegt dat je alles in classes moet stoppen. Nu doe ik dat, is het weer niet goed?

Alles in classes? Ik hoop het niet. Plaats het in klasses wanneer nodig, wanneer je bijv. de waarde eerst moet valideren voordat hij in de array komt. Of wanneer je altijd een error wilt wanneer je 2 dezelfde IDs in een array zet.
Okeej... dan klopt het in ieder geval wat ik doe. Helaas weet ik nog steeds het antwoord op m'n vraag niet... :(


Nu gaat het er mij dus om... ik heb dus zo'n algemene container. Stel dat ik die wil gebruiken om bijv. configuratiesettings in op te slaan, gebruik ik dan die algemene container? Of maak ik een nieuwe (lege) Config class die de algemene container extend?

Ozzie PHP op 09/03/2014 17:51:50

Jij bent altijd degene die zegt dat je alles in classes moet stoppen. Nu doe ik dat, is het weer niet goed?


Wat lekker ondankbaar weer hoor ;')....

Je weet je antwoord op je vraag wél al. We zitten het hier al de hele tijd te verkondigen.

Neen: in dit geval heb je geen speciale klasse nodig. Jij gaat niet akkoord met ons, stop dan met vragen stellen en doe het zoals jij het wilt.
>> Je weet je antwoord op je vraag wél al.

Nee, eigenlijk niet.

Ik zal m'n vraag eens anders proberen te stellen. Stel, je hebt een algemene class Foo die iets doet. Nu wil je die algemene class gebruiken voor een specifieke toepassing. Als ik dit vertaal in een voorbeeld, krijg je bijvoorbeeld dit. Het gaat niet om het exacte idee, maar om de gedachte.

Stel we hebben een algemene class Auto. Die kunnen we gewoon ergens voor gebruiken: $auto = new Auto(). Nu wil ik op een gegeven moment een Ford maken, maar die class is hetzelfde als de class Auto. Dus ik zou kunnen zeggen $ford = new Auto(). Ik zou ook een class Ford kunnen maken die ik de class Auto laat extenden en waar ik verder geen andere methods in plaats. Of misschien is het het handigst om de Auto class abstract te maken. Daar zat ik dus even over te denken. Maar laat anders maar zitten, ik verzin wel wat... thanks voor het meedenken in ieder geval.
Exception wordt best vaak geëxtend zonder verder iets toe te voegen. Andere use cases ken ik volgens mij niet.

Reageren