PHP的拦截器实例分析


Posted in PHP onNovember 03, 2014

本文实例讲述了PHP的拦截器用法。分享给大家供大家参考。具体如下:

PHP提供了几个拦截器,用于在访问未定义的方法和属性时被调用,如下所示:

1、__get($property)
功能:访问未定义的属性是被调用

2、__set($property, $value)
功能:给未定义的属性设置值时被调用

3、__isset($property)
功能:对未定义的属性调用isset()时被调用

4、__unset($property)
功能:对未定义的属性调用unset()时被调用

5、__call($method, $arg_array)
功能:调用未定义的方法时被调用

下面将通过一个小程序来说明这些拦截器的用途:

class intercept_demo{

    private $xingming = "";

    private $age = 10;

   

    // 若访问一个未定义的属性,则将调用get{$property}对应的方法

    function __get($property){

        $method = "get{$property}";

        if (method_exists($this, $method)){

            return $this->$method();

        }

    }
    // 若给一个未定义的属性设置值,则将调用set{$property}对应的方法

    function __set($property, $value){

        $method = "set{$property}";

        if (method_exists($this, $method)){

            return $this->$method($value);

        }   

    }

   

    // 若用户对未定义的属性调用isset方法,

    function __isset($property){

        $method = "isset{$property}";

        if (method_exists($this, $method)){

            return $this->$method();

        }

    }

   

    // 若用户对未定义的属性调用unset方法,

    // 则认为调用对应的unset{$property}方法

    function __unset($property){

        $method = "unset{$property}";

        if (method_exists($this, $method)){

            return $this->$method();

        }

    }

   

    function __call($method, $arg_array){

        if (substr($method,0,3)=="get"){

            $property = substr($method,3);

            $property = strtolower(substr($property,0,1)).substr($property,1);

            return $this->$property;

        }

    }

   

    function testIsset(){

        return isset($this->Name);

    }

   

    function getName(){

        return $this->xingming;

    }

   

    function setName($value){

        $this->xingming = $value;

    }

   

    function issetName(){

        return !is_null($this->xingming);

    }

   

    function unsetName(){

        $this->xingming = NULL;

    }

}
$intercept = new intercept_demo();

echo "设置属性Name为Li";

$intercept->Name = "Li";

echo "\$intercept->Name={$intercept->Name}";

echo "isset(Name)={$intercept->testIsset()}";

echo "";

echo "清空属性Name值";

unset($intercept->Name);

echo "\$intercept->Name={$intercept->Name}";

echo "";

echo "调用未定义的getAge函数";

echo "age={$intercept->getAge()}";

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP MemCached 高级缓存应用代码
Aug 05 PHP
TMDPHP 模板引擎使用教程
Mar 13 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
关于crontab的使用详解
Jun 24 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
PHP实现根据浏览器跳转不同语言页面代码
Aug 02 PHP
php中apc缓存使用示例
Dec 25 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
php的XML文件解释类应用实例
Sep 22 PHP
PDO::exec讲解
Jan 28 PHP
PHP命名空间用法实例分析
Sep 04 PHP
php类中的各种拦截器用法分析
Nov 03 #PHP
PHP类的反射用法实例
Nov 03 #PHP
php之curl设置超时实例
Nov 03 #PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 #PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 #PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 #PHP
php防止sql注入之过滤分页参数实例
Nov 03 #PHP
You might like
php Ajax乱码
2008/04/09 PHP
php格式化工具Beautify PHP小小BUG
2008/04/24 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
基于jquery的拖动布局插件
2011/11/25 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Python ldap实现登录实例代码
2016/09/30 Python
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
Django框架安装方法图文详解
2019/11/04 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
在python中修改.properties文件的操作
2020/04/08 Python
python实现控制台输出颜色
2021/03/02 Python
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
2014高考励志标语
2014/06/05 职场文书
经济贸易系求职信
2014/08/04 职场文书
预备党员半年考察意见
2015/06/01 职场文书
公司酒会致辞
2015/07/30 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android