转自:http://blog.csdn.net/fdipzone/article/details/8581125
php 5.3 后新增了 __call 与__callStatic 魔法方法。
__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。
__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。
__call($funcname, $arguments)
__callStatic($funcname, $arguments)
参数说明:
$funcname String 调用的方法名称。
$arguments Array 调用方法时所带的参数。
__call 例子
- <?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
- 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();
- ?>
相关推荐
主要介绍了PHP魔术方法之__call与__callStatic方法,需要的朋友可以参考下
PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload 1、__get、__set 这两个方法是为在...
总的来说, 有下面几个魔术函数 __construct() __destruct() __get() __set() __isset() __unset() __call() __callStatic() __sleep() __wakeup() __toString() __set_state() __clone() __autoload() __construct...
__construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__isset(),__call(),__callstatic; 1,__constuct()构造函数 通常实例化完一个对象之后,都要对该对象的属性...
主要介绍了PHP魔术方法的使用示例,本文分别讲解了__get、__set、__call、__callStatic、__toString、 __invoke等魔术方法的使用,需要的朋友可以参考下
PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用...
比如: __construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state() 和 __clone() 等方法在 PHP 中被称为...
PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不...
主要介绍了PHP类中的魔术方法(Magic Method)简明总结,这些方法包括__construct()、__destruct()、__call()、__callStatic()、__get()、__set()、__toString()等,需要的朋友可以参考下
技术支持 用array / config / log / guzzle等处理 关于日志 use Yansongda \ Supports \ Logger as ... public static function __callStatic ( string $ method , array $ args ) { return call_user_func_array