PHP 中__call()的使用方法

來源:互聯網
上載者:User
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在或被許可權控制中的方法,__call 方法將會被自動調用。

1.__call的使用

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

2.使用 __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");  ?>

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();  ?>

總結:

__call()函數是php類的預設魔法函數,__call() 在一個對象的上下文中,如果調用的方法不存在的時候,它將被觸發。

相關推薦:

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

php中__call()方法如何使用與重載執行個體分析

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

魔術方法__call()執行個體詳解(php物件導向進階教程)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.