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 mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
php共享内存段示例分享
Jan 20 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
PHP获取HTTP body内容的方法
Dec 31 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
php利用array_search与array_column实现二维数组查找
Jul 08 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 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 google或baidu分页代码
2009/11/26 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
js 与或运算符 || && 妙用
2009/12/09 Javascript
js登录弹出层特效
2014/03/07 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
pycharm + django跨域无提示的解决方法
2020/12/06 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
美国保健品专家:Life Extension
2018/05/04 全球购物
保洁公司服务承诺书
2014/05/28 职场文书
厕所文明标语
2014/06/11 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
经理聘任证明
2015/03/02 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js