PHP 中__call()的使用方式

墨辰丷
墨辰丷 原创
2023-03-25 22:50:02 2864浏览

本篇文章主要介绍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中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。