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代码
Mar 08 PHP
php读取msn上的用户信息类
Dec 05 PHP
php pcntl_fork和pcntl_fork 的用法
Apr 13 PHP
php中配置文件操作 如config.php文件的读取修改等操作
Jul 07 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
PHP 如何利用phpexcel导入数据库
Aug 24 PHP
Codeigniter操作数据库表的优化写法总结
Jun 12 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 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为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
Python代码缩进和测试模块示例详解
2018/05/07 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
详解Python正则表达式re模块
2019/03/19 Python
Python代码太长换行的实现
2019/07/05 Python
python全栈开发语法总结
2020/11/22 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
请用用Java代码写一个堆栈
2012/01/26 面试题
c/c++某大公司的两道笔试题
2014/02/02 面试题
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
高级文秘工作总结的自我评价
2013/09/28 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
毕业生个人总结
2015/02/28 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
2016五一手机促销广告语
2016/01/28 职场文书