Hey guys,
Ik begin het gebruik van interfaces steeds beter te begrijpen.
Nu heb ik hieronder een codevoorbeeldje. Ik wil een object met configuratiegegevens doorgeven aan een ander object Foo. Nu ben ik benieuwd hoe ik het typehinten moet aanpakken. Eerst maar eens het voorbeeldje:
<?php
class DataCollection implements DataCollectionInterface {
}
class Config extends DataCollection {
}
class Foo {
public function setConfig(DataCollectionInterface $config) {
}
}
$config = new Config($settings);
$foo = new Foo();
$foo->setConfig($config);
?>
In de setConfig method van de Foo class typehint ik nu naar een DataCollectionInterface.
Nu is mijn vraag of dit juist is. Ik typehint naar een DataCollectionInterface en daardoor weet ik dat het object wat ik binnenkrijg in de setConfig method over bepaalde functies beschikt. Prima, helemaal goed! Echter, wat ik niet weet is het object wat ik binnenkrijg ook daadwerkelijk een CONFIG object is. Het zou ook een ander object kunnen zijn, bijvoorbeeld een object waar paths of routes inzitten.
Nu is mijn vraag hoe specifiek ik moet gaan typehinten. Behalve het bovengenoemde codevoorbeeld heb ik nog 2 andere opties om te typehinten. Ik kan typehinten naar de class zelf:
<?php
class Foo {
public function setConfig(Config $config) {
}
}
?>
Of ik zou eventueel een extra ConfigInterface kunnen maken (die dan in feite overeenkomt met de DataCollectionInterface).
<?php
class Foo {
public function setConfig(ConfigInterface $config) {
}
}
?>
Wat is nu wijsheid? Hoe specifiek moet je te werk gaan?
1.338 views