PHP拦截器学习

php拥有自己内置的拦截器方法,可以拦截发送到未定义方法和属性的消息,也叫作重载。

PHP5有三个内置的拦截器方法。他们的用法和__construct()方法一样,遇到合适的条件就被调用。

方法 描述
__get() 访问未定义的属性是被调用
__set() 给未定义的属性设置时被调用
__isset() 对未定义的属性调用isset()时调用
__unset() 对未定义的属性调用unset()时调用
__call() 调用未定义的方法时调用

__get()与__set()方法用于处理类中未申明的属性。

当客户端代码试图访问未申明的属性时,__get()会被调用,并带着一个要访问该属性名称的字符串参数。无论该方法返回了啥,都会发送给客户端。举例:

<?php
class PropertyTest {
  public function __get($name) 
  {
    echo '1';
  }

  public function __set($name, $value)
  {
    echo $name . ' is ' . $value;
  }
}
$obj = new PropertyTest;
echo $obj->a;
$obj->b =  'ada';
echo $obj->b;

以上会输出: 1
b is ada;

当客户端要调用类中未定义的方法时,__call()会被调用。__call()接受2个参数,一个是方法的名称,另一个是传递给要调用方法的所有参数(数组),他所返回的任何值都会返回给客户,就像调用一个真实存在的方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,073评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,020评论 6 13
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 10,679评论 1 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,084评论 25 709
  • 01 极大多数人的人生不会经历过多的风浪,诸多的风险与波折也与之无缘。 他们都过着很普通的生活,每天三点一线,挤公...
    笔茧阅读 6,745评论 3 69

友情链接更多精彩内容