Skip to content

Instantly share code, notes, and snippets.

@caferrari
Last active August 29, 2015 14:04
Show Gist options
  • Save caferrari/61552bdb6fa13c708dbe to your computer and use it in GitHub Desktop.
Save caferrari/61552bdb6fa13c708dbe to your computer and use it in GitHub Desktop.
Dependency Injection
<?php
class Roda
{
}
// O carro cria as rodas
class Carro
{
private $rodas = array();
public function __construct()
{
// Carro depende de roda! alto acoplamento
$this->addRoda(new Roda);
$this->addRoda(new Roda);
$this->addRoda(new Roda);
$this->addRoda(new Roda);
}
public function addRoda(Roda $roda)
{
if (count($this->rodas) >= 4) {
throw new OutOfBoundsException('O carro pode ter no maximo 4 rodas');
}
$this->rodas[] = $roda;
}
}
// usando:
$carro = new Carro();
<?php
class Roda {
}
// Agora o carro não cria as rodas
class Carro
{
private $rodas = array();
public function __construct() { }
public function addRoda(Roda $roda)
{
if (count($this->rodas) >= 4) {
throw new OutOfBoundsException('O carro pode ter no maximo 4 rodas');
}
$this->rodas[] = $roda;
}
}
// O builder (design pattern) ajuda a construir o carro
class CarroBuilder
{
public static function build()
{
$carro = new Carro;
$carro->addRoda(new Roda);
$carro->addRoda(new Roda);
$carro->addRoda(new Roda);
$carro->addRoda(new Roda);
return $carro;
}
}
// usando:
$carro = CarroBuilder::build();
ou:
// injetando as rodas no carro
$carro = new Carro;
$carro->addRoda(new Roda);
$carro->addRoda(new Roda);
$carro->addRoda(new Roda);
$carro->addRoda(new Roda);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment