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经典的给图片加水印程序
Dec 06 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
PHP 事务处理数据实现代码
May 13 PHP
php array的学习笔记
May 16 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 PHP
php版微信自定义回复功能示例
Dec 05 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 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
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
php检查页面是否被百度收录
2015/10/28 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
python简单的函数定义和用法实例
2015/05/07 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
python实现比较文件内容异同
2018/06/22 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
django的ORM模型的实现原理
2019/03/04 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
师范生实习自我鉴定
2013/11/01 职场文书
酒店办公室文员岗位职责
2013/12/18 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
董事长秘书职责
2014/01/31 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书