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面向对象全攻略 (九)访问类型
Sep 30 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
phpnow php探针环境检测代码
Nov 04 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
避免Smarty与CSS语法冲突的方法
Mar 02 PHP
PHP语法小结之基础和变量
Nov 22 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
PHP实现简单日历类编写
Aug 28 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 读取和修改大文件的某行内容的代码
2009/10/30 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
跟老齐学Python之dict()的操作方法
2014/09/24 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
大学生求职自荐信
2013/12/12 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书