PHPのOOPにおけるアクセス修飾子とトレイト

注意すべき点は、トレイトの使用は継承ではないということです。 継承の場合、プライベートメソッドとプロパティは継承されません。

トレイトでは逆で、トレイトを使用するクラスでは、 そのクラスのパブリックメソッドやプロパティだけでなく、 プライベートメソッドやプロパティもアクセス可能になります。

例を見てみましょう。 プライベートメソッドを持つ次のようなトレイトがあるとします:

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

このトレイトをクラスに接続します:

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

トレイトのプライベートメソッドを使用します:

php<?php
  class Test
  {
    use TestTrait; // トレイトを接続
    
    public function __construct()
    {
      echo $this->method(); // '!!!'を出力
    }
  }
  
  new Test;
?>