<< Click to Display Table of Contents >> Trait |
![]() ![]() ![]() |
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.
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);
}
}
namespace classes\model;
class Cliente {
use FuncaoTrait;
protected $nome;
protected $email;
public function __construct($nome, $email = null) {
$this->nome = $nome;
$this->email = $email;
}
}
namespace classes\model;
class Fornecedor {
use FuncaoTrait;
protected $nome;
public function __construct($nome, $email = null) {
$this->nome = $nome;
}
}
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