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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
php内核解析:PHP中的哈希表
Jan 30 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
php格式化时间戳
Dec 17 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 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中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
js一组验证函数
2008/12/20 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
python实现电子产品商店
2019/02/26 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
如何用Lucene索引数据库
2016/02/23 面试题
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
教育学专业实习生的自我鉴定
2013/11/26 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
党风廉设责任书
2014/04/16 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
导游词之无锡古运河
2019/11/14 职场文书