php __call 与 __callStatic
转自:http://blog.csdn.net/fdipzone/article/details/8581125php 5.3 后新增了 __call 与__callStatic 魔法方法。
__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。
__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。
__call($funcname, $arguments)
__callStatic($funcname, $arguments)
参数说明:
$funcname String 调用的方法名称。
$arguments Array 调用方法时所带的参数。
__call 例子
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;
[*] 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例子
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;
[*] 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();
[*]
[*]?>
页:
[1]