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

Blog

Como instalar o Drupal via Composer num ambiente de desenvolvimento Docker?: Conteúdo atualizado - junho 2020 Como dito no Wikipédia, “Drupal é um framework modular e um...

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()
    {
        if ($this->num_agencia) {
            echo "Agência: ". $this->num_agencia . " - Rua Xy, 400 - RJ" . PHP_EOL;
        }
    }
}

Nossa Trait

trait Aviso 
{
	public $texto = "Prepare-se para as compras da Black Friday com as nossas ofertas. <a>Clique aqui</a>." . PHP_EOL;
	
	public function mensagem()
	{
		echo "Aviso: ". $this->texto;
	}
}

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
{
    public $valor = 1000.00;
    public $num_agencia = "14111-0";
    
    use Aviso; //Realizando a importação

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

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


$conta_fulano = new Conta;
$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! ㋡