`
sunwei_07
  • 浏览: 27760 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

关于PHP的拦截器使用

    博客分类:
  • web
阅读更多
成考终于结束了,又可以安心下来看看代码的书

好吧,继续学习PHP

php提供了内置的拦截器,可以拦截发送到一些未定义的方法和属性消息

先看下__get($property),它主要访问未定义的属性时被调用

看下示例:
class Coder{
  function __get($property){
    $method = "get{$property}";
    if(method_exists($this,$method)){
      return $this->$method();
    }
  }

  function getName(){
    return "SUN";
  }
}

$coder = new Coder();
print $coder->name;

程序执行后会输出SUN,如果程序里没有这个方法,就会什么也不做,会被解析成NULL

类似的方法还有__set(),__isset,__unset

下面主要来看下__call()这个方法,它是调用未定义的方法时被调用,有两个参数
1.$method, 这个是方法的名称;
2.$arg_array,是传递给要调用方法的所有参数(数组)

__call()方法对于实现委托的示例

class CoderWrite{
  function printName(Coder $c){
    print $c->getName();
  }
}

class Coder{
  private $write;
  function __construct(CoderWrite $cw){
    $this->write=$cw;
  }

  function __call($methodname,$args){
   if(method_exists($this->write,$methodname)){
     return $this->write->$methodname($this);
   }
  }

  function getName(){
    return "SUN";
  }
}

调用:$coder = new Coder(new CoderWrite());
$coder->printName();
_call()方法会被调用,然后查找CoderWrite对象中有没有printName()方法,有的话就会调用。呵呵,是不是变相的给Coder对象增加了一个方法?
0
2
分享到:
评论

相关推荐

    php中各种拦截器类.zip

    主要介绍了php类中的各种拦截器用法,实例分析了PHP中常见的拦截器__get与__set的使用方法, __get( $property ) 访问未定义的属性时调用 __set( $property , $value ) 给未定义的属性调用时赋值

    php中各种拦截器类库

    php类中的各种拦截器用法,实例分析了PHP中常见的拦截器__get与__set的使用方法, __get( $property ) 访问未定义的属性时调用 __set( $property , $value ) 给未定义的属性调用时赋值

    PHP的拦截器实例分析

    PHP拦截器是一种特殊的魔术方法,它们能够在对象的成员访问未定义时自动被调用。拦截器在面向对象编程中非常有用,特别是在处理对象属性或方法未定义时的动态行为。PHP拦截器的主要用途包括处理私有属性的访问、设置...

    php类中的各种拦截器用法分析

    本文实例讲述了php类中的各种拦截器用法。分享给大家供大家参考。具体用法分析如下: 1、__get( $property ) 访问未定义的属性时调用 复制代码 代码如下:class lanjie  {   function __get($name)   {   echo...

    JBoss WebJBOSS的负载平衡与失效转发策略是由最后一个拦截器实现的

    EJB对像,而采用了一个迂回的方法,更专业的说是一种设计模式――代理模式,真正与客户端交互的是一个代理对像①,这 个代理对像一般由客户端通过JNDI技术来取得的。而具体的代理对像的实现就由各厂商自完成了,在...

    浅谈PHP拦截器之__set()与__get()的理解与使用方法

    通过 `__set()` 和 `__get()`,我们可以实现一种类似于拦截器的机制,控制对象属性的访问。例如,我们可以在这些方法中加入验证、类型检查或者日志记录等操作,增强代码的安全性和可维护性。在上述示例中,创建了一...

    微信小程序之页面拦截器

    对需求进行抽象,其实要的就是一个过滤器,对小程序页面的访问进行过滤,...使用过php的laravel框架的童鞋,肯定一下子就联想到了laravel框架的http中间件: HTTP 中间件提供一个方便的机制来过滤进入应用程序的 HTTP

    拦截过滤器模式

    ##### 步骤7: 使用客户端演示拦截过滤器设计模式 ```java public class InterceptingFilterDemo { public static void main(String[] args) { Target target = new Target(); FilterManager manager = new ...

    360通用php防护代码

    -----------------使用方法------------------------------------------------------------------ 1.将360_safe3.php传到要包含的文件的目录 2.在页面中加入防护,有两种做法,根据情况二选一即可: a).在所需要...

    短信拦截源码

    这个项目很可能是实现了一个免杀版的短信拦截器,所谓“免杀”意味着它可能采用了一些反调试和混淆技术,以防止被恶意软件检测工具识别和阻止。这通常涉及到代码混淆、动态加载、权限控制等策略。 1. **代码混淆**...

    PHP各种异常和错误的拦截方法及发生致命错误时进行报警

    这样可以确保即使在没有使用try-catch块的情况下,异常也能得到适当的处理,避免程序突然崩溃。 `set_error_handler` 则用于拦截并处理各种错误。通过设置这个函数,你可以定义一个处理错误的方式,而不是让PHP默认...

    csrf漏洞例子(html、css、JavaScript、php)

    注解:其中src的地址money.php是网站的转账接口 其中name是转给谁,money是转多少钱 一旦目标登录了网站访问了这个网页,就会利用session给jake转账100元 可以在目录下查看journal.txt查看转账日志//每刷新一次页面...

    ChromePhp4.0 弄到的最新版Crx

    用户安装CRX扩展后,可以增强浏览器的功能,如添加书签管理器、广告拦截器等。ChromePhp4.0的CRX文件意味着它是一个可以直接安装在Chrome上的插件,使得PHP功能能够无缝接入浏览器环境。 2. **ChromePhp4.0功能**:...

    Laravel开发-sneaker

    以下是关于Laravel开发中异常处理、日志系统以及如何实现类似Sneaker功能的详细解释。 1. **Laravel 异常处理** Laravel提供了强大的异常处理机制,它包括全局异常处理、自定义异常类以及异常转换为HTTP响应。全局...

    基于PHP的Cross PHP Framework php开发框架.zip

    中间件在Cross PHP Framework中扮演着拦截器的角色,可以对HTTP请求进行预处理或后处理。这种机制使得添加全局功能,如身份验证、权限检查或日志记录,变得非常便捷。 总的来说,Cross PHP Framework为PHP开发者...

    JavaScript+php5+struts2帮助文档

    学习Struts2,你需要了解Action、配置文件(struts.xml)、拦截器链、结果类型(例如JSP、FreeMarker或Velocity模板)、国际化和验证机制。同时,Struts2与其他框架(如Hibernate进行ORM、Spring进行依赖注入)的...

    基于PHP的DFA算法敏感词过滤器

    本文将深入探讨基于PHP的DFA算法敏感词过滤器,它是如何工作的,以及如何与Laravel框架集成。 **DFA(Deterministic Finite Automaton)确定有限状态自动机**是一种计算模型,常用于文本处理和模式匹配。DFA的核心...

Global site tag (gtag.js) - Google Analytics