Trait

<< Click to Display Table of Contents >>

Navigation:  Objetos >

Trait

Previous pageReturn to chapter overviewNext page

Trait é usada quando 2 classes que não são irmãs (não herdam de uma classe comum) precisam ter mesma funcionalidade.

Para este exemplo, vamos imaginar que precisamos um retorno em maiúsculo da propriedade nome, mas não podemos implementar numa classe pai e não queremos repetir o código.

 

FuncaoTrait.php

 

namespace classes\model;
 
trait FuncaoTrait {
 
    public function converteNome(): string {
         

        // isso aqui é importante para validar se existe uma propriedade nome antes de usar
        if ( ! property_exists($this'nome')) { 
            throw new RuntimeException('Faltando o atributo nome para o retorno do FuncaoTrait.');
        }
 
        // retorna propriedade nome em maiúsculo
        return mb_strtoupper($this->nome);
    }
}

 

Cliente.php

 

namespace classes\model;
 
class Cliente {
 
    use FuncaoTrait;
    
    protected $nome;
    protected $email;
 
    public function __construct($nome$email = null) {
        $this->nome = $nome;
        $this->email = $email;
    }   
}

 

Fornecedor.php

 

namespace classes\model;
 
class Fornecedor {
 
    use FuncaoTrait;
    
    protected $nome;
 
    public function __construct($nome$email = null) {
        $this->nome = $nome;
    }
}

 

Principal.php

 

require __DIR__ . '/classes/autoload.php';
 
$cliente = new classes\model\Cliente("Maria Pedro""email@com");
$forn = new classes\model\Fornecedor("Junior Forn");
 
echo $cliente->converteNome()."<br>";
echo $forn->converteNome();

 

Saída

 

MARIA PEDRO

JUNIOR FORN