PHP __set,__get,__call,メソッド 【初級編 第44回】

この記事は2013年1月9日に書かれたものです。内容が古い可能性がありますのでご注意ください。


PHP __set,__get,__call,メソッド

クラス

前回に引き続いて、今回もクラスについて記述していきたいと思います。

__setメソッド

__setメソッドとはクラス内に存在しないプロパティに値を代入しようとするとその場合に特定の処理を実行させることができます。
また__setメソッドの引数にその存在しないプロパティ名と値を渡すことができます。

__setメソッドの記述方法

__setメソッドは以下のように記述します。

class クラス名{
  public function __set(第1引数, 第2引数){
    __setメソッド内の処理;
  }
}

__setメソッドの記述例

以下では存在しないプロパティに値を代入して、__setメソッド内にある処理を実行するサンプルです。

<?php
  class test{
    public function __set($val1, $val2){
      echo "$val1 は存在しないプロパティです。$val2 は代入できません。";
    }
  }
  $obj = new test;
  $obj->atai = 10;
?>

表示結果は以下のようになります。
ブラウザ確認画像

getメソッド

getメソッドは__setメソッドと同じように、存在しないプロパティを指定した際に実行されるメソッドです。
ただしgetメソッドの場合は、代入ではなく参照しようとすると記述した処理が実行されます。
また__setメソッドのように参照した存在しないプロパティ名を引数に渡すことができます。

getメソッドの記述方法

getメソッドは以下のように記述します。

class クラス名{
  public function __get(第1引数){
    __setメソッド内の処理;
  }
}

getメソッドの記述例

以下は存在しないプロパティを参照してgetメソッドを実行するサンプルです。

<?php
  class test{
    public function __get($val1){
      echo "$val1 は存在しません。";
    }
  }
  $obj = new test;
  echo $obj->atai;
?>

結果は以下のようになります。
ブラウザ確認画像

__callメソッド

__callメソッドとは __setメソッドや __getメソッドと同じように存在しないメソッドを実行しようとすると
その __callメソッド内に記述した処理を実行します。
__callメソッドの引数には、存在しないメソッド名とそのメソッドに渡した渡した引数の値が格納されます。

__callメソッドの記述方法

__callメソッドは以下のように記述します。

class クラス名{
  public function __call(引数1, 引数2){
    __callメソッド内の処理;
  }
}

__callメソッドの記述例

以下は存在しないメソッドを実行して、__callメソッド内の処理を実行するサンプルです。

<?php
  class test{
    public function __call($val1, $val2){
      echo "$val1 は存在しないメソッドです。";
      echo "以下の引数も渡せません。<br>";
      echo "<pre>";
      print_r($val2);
      echo "</pre>";
    }
  }
  $obj = new test;
  $obj->func(10, 20, 30);
?>

結果は以下のようになります。
ブラウザ確認画像

  • このエントリーをはてなブックマークに追加

PAGE TOP