class Magic { function __call($name,$arguments) { if($name=='foo') { if(is_int($arguments[0])) $this->foo_for_int($arguments[0]); if(is_string($arguments[0])) $this->foo_for_string($arguments[0]); } } private function foo_for_int($x) { print("oh an int!"); } private function foo_for_string($x) { print("oh a string!"); } } $x = new Magic(); $x->foo(3); $x->foo("3"); ?>
__set 和 __get
這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變數和方法。
例九: __set 和 __get
class foo { function __set($name,$val) { print("Hello, you tried to put $val in $name"); } function __get($name) { print("Hey you asked for $name"); } } $x = new foo(); $x->bar = 3; print($x->winky_winky); ?>
類型指示
在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的執行個體。
例十:類型指示
class foo { // code ... } class bar { public function process_a_foo(foo $foo) { // Some code } } $b = new bar(); $f = new foo(); $b->process_a_foo($f); ?>