PHP的拦截器实例分析

 更新时间:2014年11月03日 11:36:24   投稿:shichen2014  
这篇文章主要介绍了PHP的拦截器,以实例形式分析了常见的各类拦截器的用法,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了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 laravel实现导出PDF功能

    PHP laravel实现导出PDF功能

    有时候我们会需要使用PHP导出pdf。这篇文章主要是记录一下laravel实现导出PDF的两种方式。文中的示例代码讲解详细,需要的可以参考一下
    2022-10-10
  • PHP和Java 集成开发详解分析 强强联合

    PHP和Java 集成开发详解分析 强强联合

    很久以前,有人从www上看到看到天空上一个很亮的亮点,它就是Java语言,与此同时,在另一个地方一位梦想家也看到了一个亮点,它就是PHP.
    2008-11-11
  • php简单的上传类分享

    php简单的上传类分享

    这篇文章主要为大家分享了php简单的上传类,具有一定的实用性,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 浅析php中如何在有限的内存中读取大文件

    浅析php中如何在有限的内存中读取大文件

    突然遇到了一个要读取超过80M文件的需求,很悲剧的,不管是file_get_content还是file什么的,都会将读取的文件一次性加载到内存中
    2013-07-07
  • php常用日期时间函数实例小结

    php常用日期时间函数实例小结

    这篇文章主要介绍了php常用日期时间函数,结合实例形式总结分析了php日期时间相关的时间戳、格式化、时区获取与设置、时间戳转换与计算等相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • PHP面向对象法则

    PHP面向对象法则

    你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起
    2012-02-02
  • php外部执行命令函数用法小结

    php外部执行命令函数用法小结

    这篇文章主要介绍了php外部执行命令函数用法,结合实例形式分析了exec与system执行外部命令的相关使用技巧,需要的朋友可以参考下
    2016-10-10
  • PHP实现删除字符串中任何字符的函数

    PHP实现删除字符串中任何字符的函数

    这篇文章主要介绍了PHP实现删除字符串中任何字符的函数,涉及php针对字符串的遍历与截取操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结

    PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结

    这篇文章主要介绍了PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结,并给出了一个综合使用这些函数的例子做了一个简易文件浏览器,需要的朋友可以参考下
    2014-11-11
  • PHP中合并数组的常见方法分享

    PHP中合并数组的常见方法分享

    相信各位phper在日常开发中,会经常遇到需要合并数组的场景。那么,在php中都有哪一些方法可以用来合并数组呢,本文为大家进行了一个总结,希望对大家有所帮助
    2022-11-11

最新评论