PHPにおけるOOPでのマジックによるプロパティの取得

次に解説するマジックメソッドは、 __get と呼ばれます。この メソッドは、プライベートまたはプロテクトされたプロパティの値を読み取ろうとした際に 発動します。

何らかのクラスに __get メソッドを実装すると、存在しない または隠蔽されたプロパティへの全てのアクセスは このメソッドによって処理されるようになります。

この時、PHPは自動的にリクエストされたプロパティの名前を このメソッドの最初のパラメータとして渡し、 このメソッドによって返された値は、 アクセスが行われたプロパティの値として認識されます。

おそらく、現時点ではこれがどのように機能するのか あまり明確ではないでしょう。そのため、実際の 例を見てみましょう。ここに、プライベートおよびパブリックな プロパティを持つ Test クラスがあるとします:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // パブリックプロパティ
    private $prop2 = 2; // プライベートプロパティ
  }
?>

このクラスにマジックメソッド __get を追加してみましょう。まずは単に アクセスされたプロパティの名前を返すようにします:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // プロパティ名を単に返す
    }
  }
?>

作成したマジックメソッドの動作を確認してみましょう。 3種類のプロパティにアクセスします:パブリックプロパティ、 プライベートプロパティ、および 存在しないプロパティです:

index.php<?php
  $test = new Test;
  
  // パブリックプロパティにアクセス:
  echo $test->prop1; // 1 を出力 - つまりプロパティの値
  
  // プライベートプロパティにアクセス:
  echo $test->prop2; // 'prop2' を出力 - プロパティ名
  
  // 存在しないプロパティにアクセス:
  echo $test->prop3; // 'prop3' を出力 - プロパティ名
?>

ご覧の通り、私たちのマジックメソッドは プライベートおよび存在しないプロパティへのアクセスに 反応しますが、パブリックプロパティへのアクセスは 無視します - パブリックプロパティは以前と同様に動作します。