⊗ppOpTrInr 77 of 107 menu

Traits em OOP em PHP

Como você já sabe, em PHP não é possível herdar de várias classes ao mesmo tempo, apenas de uma. Anteriormente, já passamos pela solução para esse problema: em vez de herança, usar objetos de algumas classes dentro de outras.

No PHP, existe outra maneira. Ela consiste no uso de traits. Um trait representa um conjunto de propriedades e métodos que podem ser incluídos em outra classe. Nesse caso, as propriedades e métodos do trait serão percebidos pela classe como se fossem seus.

A sintaxe de um trait é a mesma de uma classe, exceto que o nome do trait precisa ser declarado usando a palavra-chave trait.

Não é possível criar uma instância de um trait - os traits são destinados apenas para conexão a outras classes. A própria conexão é realizada com o comando use, após o qual é indicado, separado por um espaço, o nome do trait a ser conectado. Este comando é escrito no início da classe.

Vamos ver a aplicação de traits em um exemplo prático. Suponha que tenhamos o seguinte trait Helper, contendo as propriedades privadas name e age, bem como seus getters:

<?php trait Helper { private $name; private $age; public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

Suponha que também tenhamos a seguinte classe User, em cujo construtor são definidas as propriedades name e age:

<?php class User { public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Agora, vamos adicionar os getters para as propriedades de nossa classe User. Só que não vamos escrevê-los na própria classe, mas simplesmente conectar o trait Helper, no qual esses métodos já estão implementados:

<?php class User { use Helper; // conectamos o trait public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Após a conexão do trait, em nossa classe aparecerão os métodos e propriedades desse trait. Nesse caso, vamos nos referir a eles como se fossem métodos e propriedades da própria classe:

<?php $user = new User('john', 30); echo $user->getName(); // exibirá 'john' echo $user->getAge(); // exibirá 30 ?>

Implemente a classe City com as propriedades name, age, population e os getters para elas. Suponha que nossa classe para encurtar seu código use o trait Helper já criado por nós.

bydeenesfrptru