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 相关文章推荐
推荐一篇入门级的Class文章
Mar 19 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
php数字游戏 计算24算法
Jun 10 PHP
php代码书写习惯优化小结
Jun 20 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
Nov 14 PHP
php去掉文件前几行的方法
Jul 29 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 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中大括号作用介绍
2012/03/22 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
Yii2单元测试用法示例
2016/11/12 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
javascript新手语法小结
2008/06/15 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
python网络编程示例(客户端与服务端)
2014/04/24 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
python提取字典key列表的方法
2015/07/11 Python
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
预备党员公开承诺书
2014/05/28 职场文书
股权投资协议书
2016/03/23 职场文书
Golang二维数组的使用方式
2021/05/28 Golang