Usando traits para evitar código repetido
Uma trait é um recurso adicionado na versão 5.4 do PHP que permite o reúso de código sem que ele esteja vinculado a nenhuma classe. Basicamente, uma trait é uma porção de código que pode ser reaproveitado em contextos diferentes. Observe o código a seguir.
<?php
/**
 *
 * Usando traits para evitar repetição de código.
 * @author Raphael da Silva
 *
 */
class MensagemOlaMundo
{
    private function dizerOla($texto): string
    {
        return sprintf('Olá %s.', $texto);
    }
    public function dizerOlaMundo(): void
    {
        echo $this->dizerOla('Mundo');
    }
}
A próxima classe tem um método igual ao da classe anterior.
<?php
/**
 *
 * Usando traits para evitar repetição de código.
 * @author Raphael da Silva
 *
 */
class MensagemOla
{
    private function dizerOla($text): string
    {
        return sprintf('Olá %s.', $text);
    }
    public function dizerOlaParaAlguem($nome): void
    {
        echo $this->dizerOla($nome);
    }
}
Como é possível perceber, o método dizerOla se repete em ambas as classes, para evitar essa repetição pode ser criada uma trait que contém esse método repetido. Por exemplo:
<?php
/**
 *
 * Usando traits para evitar repetição de código.
 * @author Raphael da Silva
 *
 */
trait DizerOlaTrait
{
    private function dizerOla($texto): string
    {
        return sprintf('Olá %s.', $texto);
    }
}
Depois de criar a trait, é necessário utilizar a palavra reservada use nas classes que antes continham o método que estava se repetindo. Com isso, o código da trait é importado para dentro da classe como se tivesse sido declarado dentro dela.
A seguir está a primeira classe de exemplo com a trait adicionada nela.
<?php
/**
 *
 * Usando traits para evitar repetição de código.
 * @author Raphael da Silva
 *
 */
class MensagemOlaMundo
{
    use DizerOlaTrait;
    public function dizerOlaMundo(): void
    {
        echo $this->dizerOla('Mundo');
    }
}
Segue a trait adicionada na segunda classe:
<?php
/**
 *
 * Usando traits para evitar repetição de código.
 * @author Raphael da Silva
 *
 */
class MensagemOla
{
    use DizerOlaTrait;
    public function dizerOlaParaAlguem($nome): void
    {
        echo $this->dizerOla($nome);
    }
}
Traits são um bom recurso para evitar a repetição de código, o exemplo mostrado anteriormente serve para ilustrar isso. Com esse recurso o PHP traz muito mais possibilidades para lidar com código repetido (leia-se resolvê-lo). Ter as traits como carta na manga ajuda muito.
ver todos os posts