パーフェクトPHPを使って学習中なのですが、オーバーロードのところで少し疑問に思ったことがありました。
__get()の中のif文の中は、該当する配列の要素がなかったらエラーを返すということでしょうか?
そのあとのreturn文はなんのためにあるんでしょうか??
__set()のところもなんかよくわかりません。
噛み砕いて教えて欲しいです。
php
1<?php 2 3class SomeClass { 4 5 private $values = array(); // privateな値を保存するコンテナ 6 7 // privateなコンテナへのアクセサ(getter) 8 9 public function __get($name) { 10 11 echo "get: $name",PHP_EOL; 12 if (!isset($this->values[$name])) { 13 throw new OutOfBoundsException($name . "not found."); 14 } 15 16 return $this->values[$name]; 17 18 } 19 20 // privateなコンテナへのアクセサ(setter) 21 22 public function __set($name,$value) { 23 24 echo "set: $name setted to $value",PHP_EOL; 25 $this->values[$name] = $value; 26 27 } 28 29 public function __isset($name) { 30 31 echo "isset: $name", PHP_EOL; 32 return isset($this->values[$name]); 33 34 } 35 36 public function __unset($name) { 37 38 echo "unset: $name", PHP_EOL; 39 unset($this->values[$name]); 40 } 41 42 public function __call($name,$args) { 43 44 echo "call: $name", PHP_EOL; 45 46 // アンダースコアをつけ、メソッド名とする 47 48 $method_name = "_" . $name; 49 if(!is_callable(array($this,$method_name))) { 50 throw new BadMethodCallException($name . "method not found."); 51 } 52 53 return call_user_func_array(array($this,$method_name),$args); 54 } 55 56 public static function __callStatic($name,$args) { 57 58 echo "callStatic: $name", PHP_EOL; 59 60 $method_name = "_" . $name; 61 if(!is_callable(array("self",$method_name))) { 62 63 throw new BadMethodCallException($name . "method not found."); 64 } 65 66 return call_user_func_array(array("self",$method_name),$args); 67 } 68 69 private function _bar($value) { 70 71 echo "bar called with arg '$value'", PHP_EOL; 72 } 73 74 private static function __staticBar($value) { 75 76 echo "staticBar called with arg '$value'", PHP_EOL; 77 } 78 79 80} 81 82// 以下テストケース 83$test = new SomeClass(); 84$test->foo =10; 85var_dump($test->foo); 86var_dump(isset($test->foo)); 87var_dump(empty($test->foo)); 88unset($test->foo); 89var_dump(isset($test->foo)); 90$test->bar('baz'); 91SomeClass::staticBar('baz');