PHP内置拦截器初步介绍

简介:

PHP提供了内置的拦截器(intercepter),它可以拦截发送到未定义的属性或者方法的消息。它也被称为重载。不过我们为了避免和java和c++中的重载歧义还是叫拦截器。

 

拦截器可以是类更加完善和安全。对于调用的未知的属性或者方法可以自定义的处理。不管是自己猜测处理或者返回自定义的信息。

 
  1. <?php  
  2. /** 
  3.  * PHP5中拦截器学习测试 
  4.  * __get( $property ) 访问未定义的属性时候被调用 
  5.  * __set( $property, $value) 给未定义的属性赋值时被调用 
  6.  * __isset( $property ) 给未定义的属性调用isset()时候被调用 
  7.  * __unset( $property ) 给未定义的属性调用unset()的时候被调用 
  8.  * __call( $method, $arg_array ) 调用未定义的方法时候被调用 
  9.  *  
  10.  */ 
  11. error_reporting(E_ALL); 
  12. class person { 
  13.      
  14.     public $name
  15.     public $age
  16.      
  17.     public function __get( $property ) { 
  18.         return null; 
  19.     } 
  20.      
  21.     public function __set( $property$value) { 
  22.         return null; 
  23.     } 
  24.      
  25.     public function __isset( $property ) { 
  26.         return false; 
  27.     } 
  28.      
  29.     public function __unset( $property ) { 
  30.         return true; 
  31.     } 
  32.      
  33.     public function __call( $method,$arg_array ) { 
  34.         return $arg_array
  35.     } 
  36.      
  37.     public function initialize($name,$age) { 
  38.         $this->name = $name
  39.         $this->age = $age
  40.         return true; 
  41.     } 
  42.      
  43. $person = new person(); 
  44. $person->sex; //返回null 因为类中没有定义这个属性 
  45. isset($person->age); //如果类中有这个属性 但是没有赋值 那么不会 不会走__isset 会直接返回false或者true 
  46. $person->sex = 'male';//如果对一个不存在的属性定义那么会调用__get 方法 
  47. $person->init('ZhangSan','20');// 这个会走__call 参数会当作数组 $arg_array传入 
  48. unset($person->sex);//这里会调用__unset 方法 

 



    本文转自kefirking 51CTO博客,原文链接:http://blog.51cto.com/phpzf/804700,如需转载请自行联系原作者





相关文章
|
7月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
81 0
|
7月前
|
关系型数据库 MySQL 数据库连接
PHP 原生连接 Mysql
PHP 原生连接 Mysql
107 0
|
7月前
|
关系型数据库 MySQL Unix
PHP MySql 安装与连接
PHP MySql 安装与连接
130 0
|
3月前
|
关系型数据库 MySQL PHP
|
8天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
7月前
|
关系型数据库 MySQL 数据库连接
PHP 原生操作 Mysql 增删改查案例
PHP 原生操作 Mysql 增删改查案例
87 0
|
2月前
|
监控 关系型数据库 MySQL
PHP与MySQL的结合:实现局域网上网行为监控软件的数据库管理
在当今信息化时代,网络安全日益成为重要的话题。为了有效监控和管理局域网上网行为,开发一个基于PHP和MySQL的数据库管理系统是一个理想的选择。本文将介绍如何结合PHP和MySQL,开发一款简单而高效的局域网上网行为监控软件,并重点关注数据库管理方面的实现。
191 0
|
8月前
|
运维 关系型数据库 MySQL
【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)(二)
【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)(二)
202 0
|
8月前
|
消息中间件 NoSQL 关系型数据库
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
104 0
|
4月前
|
NoSQL 关系型数据库 应用服务中间件
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
88 0