php5.3.0中新增了两个魔术方法:__call()__callStatic()
用这两个方法可以做很多神奇的事情

定义

这两个函数的定义如下:

1
2
public mixed __call ( string $name , array $arguments )
public static mixed __callStatic ( string $name , array $arguments )

$name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数。

特性

  1. 在对象中调用一个不可访问方法时,__call() 会被调用。
  2. 用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。

即当访问一个类的未定义方法,或者没有权限的方法(如私有方法)时,php会自动去调用__call()函数__callStatic()函数。

使用

利用这两个魔术方法可以实现如多函数公用一段逻辑等功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class UrlHelper
{

private $url = 'www.haharazer.tk';
public function __callStatic($name, $arguments)
{

return $this->url + $this->$name($arguments);
}

private function getAdminUrl()
{

return '/admin';
}
private function getTestUrl()
{

return '/test';
}
}
$helper = new UrlHelper();
echo $helper->getAdminUrl(); // 输出'www.haharazer.tk/admin'
echo $helper->getTestUrl(); // 输出'www.haharazer.tk/test'
?>

参考:
[1] http://www.php.net/manual/zh/language.oop5.overloading.php#object.call
[2] http://blog.csdn.net/fdipzone/article/details/8581125

留言