今天在網上發現了一片好文章,介紹_call()方法。
依靠這個方法能夠實現方法重載,這是找了很久的東西了。
發在這裏,算做筆記。
---------------------------------------
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。若是你試着調用一個對象中不存在的方法,__call 方法將會被自動調用。
例七:__call
<?php
class foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!");
}
} $x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>
這個特殊的方法能夠被用來實現「過載(overloading)」的動做,這樣你就能夠檢查你的參數而且經過調用一個私有的方法來傳遞參數。
例八:使用 __call 實現「過載」動做 php
<?php 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"); ?>