• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP 中__call()的使用方式

php 搞代码 3年前 (2022-01-22) 21次浏览 已收录 0个评论

本篇文章主要介绍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[$arra<strong style="color:transparent">本文来源gaodai#ma#com搞@@代~&码*网/</strong><strong>搞gaodaima代码</strong>y[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()的使用方式的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 中__call()的使用方式

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址