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); ?>