• Twitter
  • GitHub
  • Flickr
  • Skype
  • Stack Overflow em Português

Blog

Método de reutilização de código – Traits: Hey, pessoal! Quero deixar aqui arquivado algo que venho utilizando muito, os Traits. Nada de novo, e algo que o PHP começou...

Método de reutilização de código – Traits

Hey, pessoal!

Quero deixar aqui arquivado algo que venho utilizando muito, os Traits. Nada de novo, e algo que o PHP começou a implementar a partir do PHP 5.4.0. Podemos dizer que é uma forma de fazer herança horizontal por meio de blocos individuais de códigos. Traits não podem ser instanciados. Parecidos com classes abstratas, mas com a diferença que permite ao desenvolvedor reutilizar conjuntos de métodos livremente em várias classes independentes e que residem em hierarquias de classes diferentes, para proporcionar uma funcionalidade adicional -- se uma classe quer usá-las, basta pedir. A semântica da combinação de Traits e classes é definida de uma maneira que reduz a complexidade e evita os problemas típicos associados a herança múltipla e Mixins.

Vamos ao enunciado

Iremos criar uma classe Conta que irá estender uma classe Agencia. O objetivo será imprimir o saldo do correntista e o endereço da agência. E a Trait? Como sempre que acesso minha conta pela App do banco há uma mensagem bem no início do topo da tela, então iremos criar um método tela, dentro da classe Conta -- lógica simplificada -- para exibir esse Aviso que é a Trait, além  de exibir o endereço da agência e o saldo. A mensagem de aviso será algo relacionado à  Black Friday, pois estamos no mês que inaugura a temporada de compras natalícias e foi o texto que apareceu para mim. rs...

Vamos ao código.


class Agencia
{
    public function localAgencia($agencia = null)
    {
        if ($agencia) {
            switch ($agencia) {
                case "11087-10":
                    echo "Agência: " . $agencia . " - Rua Xy, 400 - RJ" . PHP_EOL;
                break;
                default: 
                    echo " Verifique o número de sua agência";
            }
        }
    }
}

Nossa Trait


trait Aviso
{
    public $texto = "Prepare-se para as compras da Black Friday com as nossas ofertas.";

    public function mensagem()
    {
        echo " Aviso: " . $this->texto . PHP_EOL;
    }
}

A palavra-chave use deve ser declarada antes do nome da Trait no escopo da classe para realizar a importação.


class Conta extends Agencia
{
    private $saldo_conta;
    protected $num_agencia;

    use Aviso; //Trait - Realizando a importação

    public function __construct($agencia, $saldo)
    {
        $this->num_agencia = $agencia;
        $this->saldo_conta = $saldo;
    }

    public function saldoTotal()
    {
        echo " Saldo Total: R$" . $this->saldo_conta . PHP_EOL;
    }

    public function tela()
    {
        $this->mensagem();
        parent::localAgencia($this->num_agencia);
        $this->saldoTotal($this->saldo_conta);
    }
}


$conta_fulano = new Conta("11087-10", 1900.00);
$conta_fulano->tela();

Saída:

Traits - saída

Auxílio bom demais...

Base: http://php.net/manual/pt_BR/language.oop5.traits.php
That's all folks!