-
-
Save timothylhuillier/6136931 to your computer and use it in GitHub Desktop.
explication de la dépendance IOC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Si on passe les dépendances manuellement | |
class HTML | |
{ | |
function __construct(URL $url) | |
{ | |
$this->url = $url; | |
} | |
public function link($to, $text) | |
{ | |
$link = $this->url->to($to); | |
return sprintf('<a href="%s">%s</a>', $link, $text); | |
} | |
} | |
// On créer nos classes, on passe URL à HTML | |
$url = new URL; | |
$html = new HTML($url) | |
// Jusqu'ici tout va bien | |
// Le code dessous retourne <a href="http://localhost.com/admin">Administration</a> | |
$html->link('admin', 'Administration') | |
// Maintenant on a crée notre classe d'URL | |
class MaSuperUrl | |
{ | |
public function to($link) | |
{ | |
return 'http://jaimelafrite.com/'.$link; | |
} | |
} | |
// Si je veux que HTML utilise ma classe, bah je peux pas. | |
// On a déjà passé URL à HTML, elle l'utilise déjà, c'est mort | |
////////////////////////////////////////////////////////////////////// | |
////////////////////////////////////////////////////////////////////// | |
// Avec un container | |
class HTML | |
{ | |
public function __construct(Container $app) | |
{ | |
$this->container = $app; | |
} | |
public function link($to, $text) | |
{ | |
$link = $this->container['url']->to($to); | |
return sprintf('<a href="%s">%s</a>', $link, $text); | |
} | |
} | |
$app = new Container; | |
$app['url'] = new URL; | |
$app['html'] = new HTML($app); | |
$app['html']->link('admin', 'Administration') | |
// Retourne toujours <a href="http://localhost.com/admin">Administration</a> | |
// Jusqu'ici tout va bien | |
// Mais maintenant on peut échanger les dépendances à la volée | |
$app['url'] = new MaSuperUrl; | |
$app['html']->link('admin', 'Administration'); | |
// Retourne <a href="http://jaimelafrite.com/admin">Administration</a> | |
// Parce que quand HTML a eu besoin de URL il a été la chercher dans le container | |
// Et comme il n'y a _qu'un seul_ container, partout tout le temps | |
// Quand on a échangé la classe d'URL par MaSuperURL, ça c'est aussi répercuté | |
// à l'intérieur de HTML |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment