首頁  >  文章  >  後端開發  >  PHP 中__call()的使用方法

PHP 中__call()的使用方法

墨辰丷
墨辰丷原創
2018-05-09 15:07:2527215瀏覽

PHP5 的物件新增了一個專用方法 __call(),這個方法用來監視一個物件中的其它方法。如果你試著呼叫一個物件中不存在或被權限控制中的方法,__call 方法將會被自動呼叫。

1.__call的使用

<?php  
class foo {  
  function __call($name,$arguments) {  
    print("Did you call me? I&#39;m $name!");  
  }  
} $x = new foo();  
$x->doStuff();  
$x->fancy_stuff();  
?>

#2.使用 __call 實現「超載」動作

<?php  
class Magic {  
  function __call($name,$arguments) {  
    if($name==&#39;foo&#39;) {  
  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");  
?>

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 &#39;$name&#39; ");  
}  
  
}  
}  
  
class User extends Obj  
{  
public function show()  
{  
print ("Username: ".$this->property[&#39;Username&#39;]."<br>;");  
//print ("Username: ".$this->getUsername()."<br>;");  
print ("Sex: ".$this->property[&#39;Sex&#39;]."<br>;");  
print ("Age: ".$this->property[&#39;Age&#39;]."<br>;");  
}  
}  
  
class Car extends Obj  
{  
public function show()  
{  
print ("Model: ".$this->property[&#39;Model&#39;]."<br>;");  
print ("Sum: ".$this->property[&#39;Number&#39;] * $this ->property[&#39;Price&#39;]."<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();  
?>

總結:

__call()函數是php類別的預設魔法函數,__call() 在一個物件的上下文中,如果呼叫的方法不存在的時候,它將被觸發。

相關推薦:

PHP中__call()和__callStatic()使用方法

php中__call()方法如何使用與重載實例分析

php的魔術方法__get(),__set(),__call(),__callStatic()以及static用法詳解

魔術方法__call()實例詳解(php物件導向高階教學)

#

以上是PHP 中__call()的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn