您的位置:首页 > 编程语言 > PHP开发

php __call 与 __callStatic

2014-09-20 11:38 120 查看

php __call 与 __callStatic

php 5.3 后新增了 __call 与__callStatic 魔法方法。

__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。

__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。

__call($funcname, $arguments)

__callStatic($funcname, $arguments)



参数说明:


$funcname String 调用的方法名称。

$arguments Array 调用方法时所带的参数。

__call 例子

[php] view plaincopy

<?php

class Member{

protected $memberdata = array();

public function __call($func, $arguments){

list($type, $name) = explode('_', $func);

if(!in_array($type, array('set','get')) || $name==''){

return '';

}

switch($type){

case 'set':

$this->memberdata[$name] = $arguments[0];

break;

case 'get':

return isset($this->memberdata[$name])? $this->memberdata[$name] : '';

break;

default:

}

}

}

class User extends Member{

public function show(){

if($this->memberdata){

foreach($this->memberdata as $key=>$member){

echo $key.':'.$member.'<br>';

}

}

}

}

class Profession extends Member{

public function show(){

if($this->memberdata){

foreach($this->memberdata as $key=>$member){

echo $key.':'.$member.'<br>';

}

}

}

}

$userobj = new User();

$userobj->set_name('fdipzone');

$userobj->set_age(29);

$userobj->show();

$probj = new Profession();

$probj->set_profession('IT SERVICE');

$probj->set_price(2500);

$probj->show();

?>

__callStatic例子

[php] view plaincopy

<?php

class Member{

protected static $memberdata = array();

public static function __callStatic($func, $arguments){

list($type, $name) = explode('_', $func);

if(!in_array($type, array('set','get')) || $name==''){

return '';

}

$feature = get_called_class();

switch($type){

case 'set':

self::$memberdata[$feature][$name] = $arguments[0];

break;

case 'get':

return isset(self::$memberdata[$feature][$name])? self::$memberdata[$feature][$name] : '';

break;

default:

}

}

}

class User extends Member{

public static function show(){

$feature = get_called_class();

if(self::$memberdata[$feature]){

foreach(self::$memberdata[$feature] as $key=>$member){

echo $key.':'.$member.'<br>';

}

}

}

}

class Profession extends Member{

public static function show(){

$feature = get_called_class();

if(self::$memberdata[$feature]){

foreach(self::$memberdata[$feature] as $key=>$member){

echo $key.':'.$member.'<br>';

}

}

}

}

User::set_name('fdipzone');

User::set_age(29);

User::show();

Profession::set_profession('IT SERVICE');

Profession::set_price(2500);

Profession::show();

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐