Modificatori di accesso e tratti in OOP in PHP

È importante prestare attenzione al fatto che l'uso dei tratti non è ereditarietà. Nell'ereditarietà i metodi e le proprietà privati non vengono ereditati.

Nei tratti è vero il contrario: nella classe che utilizza il tratto saranno accessibili sia i metodi e le proprietà pubblici che quelli privati.

Vediamo un esempio. Supponiamo di avere il seguente tratto con un metodo privato:

php<?php
  trait TestTrait
  {
    private function method()
    {
      return '!!!';
    }
  }
?>

Colleghiamo il nostro tratto alla classe:

php<?php
  class Test
  {
    use TestTrait;
  }
  
  new Test;
?>

Usiamo il metodo privato del tratto:

php<?php
  class Test
  {
    use TestTrait; // colleghiamo il tratto
    
    public function __construct()
    {
      echo $this->method(); // visualizzerà '!!!'
    }
  }
  
  new Test;
?>