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 相关文章推荐
BBS(php & mysql)完整版(七)
Oct 09 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
php模板原理讲解
Nov 13 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
使用PHP实现生成HTML静态页面
Nov 18 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
laravel学习教程之存取器
Jul 30 PHP
php图形jpgraph操作实例分析
Feb 22 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
PHP 断点续传实例详解
2017/11/11 PHP
js树形控件脚本代码
2008/07/24 Javascript
分页栏的web标准实现
2011/11/01 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
Python使用gensim计算文档相似性
2016/04/10 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
千元咖啡店的创业计划书范文
2013/12/29 职场文书
九年级体育教学反思
2014/01/23 职场文书
班级入场式解说词
2014/02/01 职场文书
村委会贫困证明范本
2014/09/17 职场文书
个人整改措施书面材料
2014/10/24 职场文书