Skip to content

Instantly share code, notes, and snippets.

@alanwillms
alanwillms / SOLID-SRP-02.php
Last active August 29, 2015 14:22
Exemplo de método com múltiplas responsabilidades, violando SRP
<?php
class Notificacao
{
/**
* Envia esta notificação por e-mail se o destinatário for válido.
* @return boolean se a mensagem foi enviada com sucesso.
*/
public function enviar()
{
if (!$this->destinatario || !preg_match(EMAIL_REGEX, $this->destinatario)) {
@alanwillms
alanwillms / codigo_sem_ocp.php
Last active August 29, 2015 14:25
Open/Closed Principle EXAMPLE
<?php
class Impostometro
{
...
/**
* Adiciona o valor dos impostos de um item
* @param mixed $item
* @return void
*/
@alanwillms
alanwillms / codigo_sem_ocp_atualizado.php
Last active August 29, 2015 14:25
Open/Closed Principle EXAMPLE
<?php
class ProdutoImportado extends Produto
{
...
}
class Impostometro
{
...
@alanwillms
alanwillms / codigo_ocp.php
Last active September 21, 2015 17:30
Open/Closed Principle EXAMPLE
<?php
interface Tributavel
{
/**
* Calcula o valor dos impostos que incidem sobre esta entidade.
* @return float
*/
public function getValorImpostos();
}
@alanwillms
alanwillms / codigo_ocp_nova_classe.php
Last active August 29, 2015 14:25
Open/Closed Principle EXAMPLE
<?php
class ProdutoExportado extends Produto
{
...
public function getValorImpostos()
{
return parent::getValorImpostos() + $this->getValorIE();
}
}
@alanwillms
alanwillms / PHP-method-overwriting.php
Last active August 29, 2015 14:26
Liskov 1: PHP method overwriting
<?php
class ClasseBase
{
public function metodo($a) { } // um parâmetro
}
class SubClasse extends ClasseBase
{
public function metodo($a, $b) { } // dois parâmetros
}
@alanwillms
alanwillms / PHP-constructor-overwriting.php
Created August 6, 2015 22:45
Liskov 2: PHP constructor overwriting
<?php
class ClasseBase
{
public function __construct($a) { } // um parâmetro
}
class SubClasse extends ClasseBase
{
public function __construct($a, $b) { } // dois parâmetros
}
<?php
/**
* Interface para meios de transporte para envio de um pedido.
*/
interface TransportePedidoInterface
{
/**
* Envia um pedido.
* @param Pedido $pedido pedido a ser enviado.
* @return boolean se o pedido foi enviado com sucesso ou não.
@alanwillms
alanwillms / liskov-breaking-1.php
Last active August 29, 2015 14:27
liskov-breaking-1.php
<?php
class Logger
{
public function log($mensagem)
{
$this->append($mensagem);
}
}
class DatabaseLogger extends Logger // sub-classe
@alanwillms
alanwillms / liskov-breaking-2.php
Last active August 29, 2015 14:27
liskov-breaking-2.php
<?php
class Logger
{
public function log($mensagem)
{
$this->append($mensagem);
}
}
class DatabaseLogger extends Logger // sub-classe