這篇文章主要介紹PHP 中__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(); ?>
這個特殊的方法可以被用來實現JAVA中的「過載(overloading)」的動作,這樣你就可以檢查你的參數並且透過呼叫一個私有的方法來傳遞參數。
範例二:使用 __call 實作「過載」動作
<?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"); ?>
引自:
_call和___callStatic這兩個函數是php類別的預設函數,
__call() 在一個物件的上下文中,如果呼叫的方法不能訪問,它將被觸發
__callStatic() 在一個靜態的上下文中,如果呼叫的方法不能訪問,它將被觸發
實例:
<?php abstract class Obj { protected $property = array(); abstract protected function show(); public function __call($name,$value) { if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array)) { $this->property[$array[1]] = $value[0]; return; } elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array)) { return $this->property[$array[1]]; } else { exit("<br>;Bad function name '$name' "); } } } class User extends Obj { public function show() { print ("Username: ".$this->property['Username']."<br>;"); //print ("Username: ".$this->getUsername()."<br>;"); print ("Sex: ".$this->property['Sex']."<br>;"); print ("Age: ".$this->property['Age']."<br>;"); } } class Car extends Obj { public function show() { print ("Model: ".$this->property['Model']."<br>;"); print ("Sum: ".$this->property['Number'] * $this ->property['Price']."<br>;"); } } $user = new User; $user ->setUsername("Anny"); $user ->setSex("girl"); $user ->setAge(20); $user ->show(); print("<br>;<br>;"); $car = new Car; $car ->setModel("BW600"); $car ->setNumber(5); $car ->setPrice(40000); $car ->show(); ?>
相關推薦:
PHP開發(17)-callback-readdir-is_dir-foreach-glob- PhpStorm
java-並發-Callable、Future和FutureTask
php-Call to a member function assign() on
#以上是PHP 中__call()的使用方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!