PHPイミフ仕様3 __get(), __set()
PHPはクラスに存在しないプロパティをセットすることができる。これだけでもかなりフリーダムすぎる仕様だと思う。
その上、クラスに存在しないプロパティが呼び出されたとき専用のメソッドを定義することができる。それが、__get()と__set()である。
<?php class Thing { public $a = 0; } $buttai = new Thing; $buttai->b = 1; //問題なし ?>
__get()と__set()は、例えばDBからでっかいデータをゲットする処理なんかは重いから、アクセスされたときはじめてDBアクセスするような場合、なんかに使うのだそうだ。
<?php class Person { public function __get($property) { if ($property === 'biography') { $biography = "なんだか長い説明文123456789"; // DBからデータをゲットするなど return $biography; } } public function __set($property, $value) { if ($property === 'biography') { // DBにデータをしまい込むなど } } } ?>