Les traits en PHP est un moyen simple et rapide de réutiliser du code dans de nombreuses classes sans pour autant le dupliquer ni utiliser l'héritage des classes qui peut vite devenir lourd.
Sans traits, ce code n'est pas centralisé, et difficile à faire évoluer, surtout si le projet devient gros.
Avec un trait cela pourrait devenir plus simple, plus facile à utiliser et plus maintenable.
Notre code devient ainsi plus réutilisable et plus maintenable. Si on voulait changer cette logique de logCreation nous pourrions le faire à un seul endroit et cela se répercuterait à un seul endroit.
Les traits supportent les propiétés, les fonctions mais aussi les attributs ! Cela peut être pratique dans de nombreux, notamment les entités.
Par exemple, on peut imaginer un IdTrait
Vous pouvez désormais utiliser ce trait dans l'ensemble de vos entités contenant un id
# src/CreatedAtTrait
trait CreatedAtTrait
{
public \DateTime $createdAt;
public function setCreatedAt(): void
{
$this->createdAt = new \DateTime();
}
public function logCreation(): void
{
echo self::class . " created: " . $this->createdAt->format("Y-m-d");
}
}
# src/User.php
class User
{
use CreatedAtTrait;
public function __construct()
{
$this->setCreatedAt();
}
}
# src/Content.php
class Content
{
use CreatedAtTrait;
public function __construct()
{
$this->setCreatedAt();
}
}
# src/UserController.php
....
$user = new User();
$this->entityManager->persist($user);
$user->logCreation(); # "User created: 2024-09-09"
...