Traits в php 5.4. Разбираем детали реализации

Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 — это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.

Простой пример типажа, чтобы не заглядывать в Википедею:

//определение типажа
 
trait Pprint
 
{
 
     public function whoAmI()
 
     {
 
     return get_class($this) . ': ' . (string) $this;
 
     }
 
}
 
 
 
class Human
 
{
 
     use Pprint; //подключаем типаж, ключевое слово use
 
 
 
     protected $_name = 'unknown';
 
 
 
     public function __construct($name)
 
     {
 
             $this->_name = $name;
 
 
 
     }
 
 
 
     public function __toString()
 
     {
 
          return (string) $this->_name;
 
     }
 
}
 
 
 
$a = new Human('Nikita');
 
echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita

 

Как видно, к классу Human было добавлено поведение из типажа Pprint.

Но во всём есть свои детали.

О них далее.