php的__call() 函數是一個魔術函數,所謂PHP的魔術函數,簡單的說就是在PHP中具有特定名稱——都是用兩個下劃線開頭的,並且PHP解釋器會在運行到某一個時機的時候自動尋找並運行的方法。
當我們調了一個不可以存取的成員方法時,__call魔術方法就會被呼叫.
不可以存取的成員方法的是指(1. 該成員方法不存在, 2. 成員方法是protected或 private)(建議學習:PHP視訊教學)
我們就是希望,在類別的外部直接呼叫不可存取的成員方法(private , protected).
案例說明
<?php header('content-type:text/html;charset=utf-8'); //__call魔术方法 class Monk{ public $name; protected $hobby; public function __construct($name, $hobby){ $this->name = $name; $this->hobby = $hobby; } //输出该对象的信息 public function showInfo(){ echo '<br> 名字是 ' . $this->name; foreach($this->hobby as $hobby){ echo '<br> 爱好有 ' . $hobby; } } //会做算术题, 保护的 protected function getSum($num1, $num2){ return $num1 + $num2; } //编写这个__call魔术方法, __call 魔术方法会接收到两个参数 /* @param $method_name 就是函数名 @param $parameters 就是参数,类型是array */ public function __call($method_name, $parameters){ // echo '<br> method_name = ' . $method_name; // echo '<br> $parameters <br>'; // var_dump($parameters); //判断 $this 中是否有 $method_name 函数,有就返回true,否则返回false if(method_exists($this, $method_name)){ return $this->$method_name($parameters[0], $parameters[1]); }else{ return '没有你要调用的函数'; } } } $monk = new Monk('济公', array('no1'=>'腾云驾雾', 'no2'=>'喝酒')); $monk->showInfo(); //当我们直接调用 protected 方法时,就会触发 __call 魔术方法 echo '<br> 结果是' . $monk->getSum(100, 200);
以上是php的__call函數是屬於哪一類的詳細內容。更多資訊請關注PHP中文網其他相關文章!