Trait é um poderoso recurso no PHP que nos permite criar “classes” utilitárias e dispensar assim a necessidade de herança múltipla. Em outras palavras, podemos criar uma Trait que se assemelha muito a classes, mas elas não podem ser instâncias ou herdadas, pelo contrário, podem ser chamadas diretamente nas nossas classes.
Ao utilizar Traits, nosso objetivo é agrupar métodos e funções relacionados a uma entidade específica, criando uma espécie de "classe utilitária" que pode ser compartilhada entre várias classes. Essa abordagem resulta em um código mais organizado e legível, com funcionalidades bem encapsuladas e de fácil acesso. A criação de uma trait é tão simples quanto definir uma classe, mas utilizando a palavra reservada "trait" em vez de "class", permitindo-nos encapsular e compartilhar funcionalidades com uma simplicidade notável. Ao adotar traits em nosso código, expandimos consideravelmente a capacidade de reutilização de código, tornando nossas classes mais flexíveis, modulares, eficientes e garantindo que as manutenções futuras sejam mais eficazes.
Uma trait não deve ser tratada como uma classe, mesmo que ambas sejam muito semelhantes. Conforme já vimos anteriormente, utilizamos a palavra trait
ao invés de class
, conforme mostra o código a seguir.
<?php
namespace App\Trait;
trait Log
{
public function message(string $message): string
{
return sprintf('<b>Message</b>: %s', $message);
}
}
A utilização é bem simples, basta fazer o uso da trait dentro da classe através da sintaxe use TraitName
, por exemplo. No nosso exemplo, nós utilizamos o composer para fazer o autoload das nossas dependências através da PS4, por tanto, antes da declaração de classe você verá uma chamada para o nosso arquivo.
Vamos utilizar uma classe chamada User()
para chamar o método message()
da nossa Trait. Veja como é simples através do exemplo abaixo.
<?php
namespace App\Controller;
use App\Trait\Log;
class User
{
use Log;
private string $name;
public function __construct(string $name)
{
//Construtor
$this->name = $name;
}
public function setUser()
{
//Persiste usuario
if (true) {
return $this->message($this->name);
}
}
}
Agora para finalizar, basta fazer a instância da classe usuário e chamar o método setUser()
, assim a Trait será chamada e o resultado impresso na tela, se necessário.
<?php
require_once('vendor/autoload.php');
use App\Controller\User;
$user = new User('SatellaSoft.');
echo $user->setUser();
Caso tenha ficado com alguma dúvida, assista a nossa videoaula complementar, disponível abaixo.
Traits em PHP: https://www.php.net/manual/pt_BR/language.oop5.traits.php