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数组函数
Aug 18 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
php学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
Yii框架的redis命令使用方法简单示例
Oct 15 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编译安装时常见错误解决办法
2015/05/28 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
javascript每日必学之循环
2016/02/19 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Python中请使用isinstance()判断变量类型
2014/08/25 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
物业客服专员岗位职责
2013/11/30 职场文书
贺卡寄语大全
2014/04/11 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
党员带头倡议书
2015/04/29 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript