`

也谈PHP简单拦截器实现方法

    博客分类:
  • PHP
阅读更多

<?php
class Action{
 public function perform(){
  echo 'hello,fanyh!<br>' ;
 }
}
/**
 * Interceptor接口
 * @author Administrator
 *
 */
interface Interceptor{
 /**
  * 在指定的方法之前执行
  */
 public function doBefore() ;
 /**
  * 在指定的方法之后 执行
  */
 public function doAfter() ;
}
/**
 * 所有Interceptor的基类
 * @author Administrator
 *
 */
abstract class AbstractInterceptor implements Interceptor{
 public final function invoke($object,$method,$args=null){
  $this->doBefore() ;
  if(method_exists($object,$method)){
   $object->$method($args);
  }
  $this->doAfter() ;
 }
}
/**
 * 定义一个Interceptor
 * @author Administrator
 *
 */
class InterceptorImpl1 extends AbstractInterceptor{
 /**
  * 
  */
 public function doBefore() {
  echo 'Before method......111111111111111111<br>' ;
 }
 /**
  * 
  */
 public function doAfter() {
  echo 'After method......1111111111111111111<br>' ;
 }
}
/**
 * 定义一个Interceptor
 * @author Administrator
 *
 */
class InterceptorImpl2 extends AbstractInterceptor{
 /**
  * 
  */
 public function doBefore() {
  echo 'Before method......2222222222222<br>' ;
 }
 /**
  * 
  */
 public function doAfter() {
  echo 'After method......22222222222222222<br>' ;
 }
}
/**
 * 控制器类,同时作为Interceptor的容器
 * @author Administrator
 *
 */
class Controller{
 private $interceptors = array();
 private $index = 0 ;
 /**
  * 调用Interceptor中的方法来执行
  */
 public function invoke(){
  if ($this->index<count($this->interceptors)){
   $this->interceptors[$this->index++]->invoke($this,'invoke') ;
  }else{
   $this->index = 0 ;
   $action = new Action() ;
   $action->perform() ;
  }
 }
 /**
  * 增加Interceptor
  * @param unknown_type $interceptor
  */
 public function addInterceptor($interceptor){
  $this->interceptors[] = $interceptor ;
 }
}

$controller = new Controller() ;
$controller->addInterceptor(new InterceptorImpl1()) ;
$controller->addInterceptor(new InterceptorImpl2()) ;
$controller->invoke() ;
?>
 


代码运行结果:

Before method......111111111111111111
Before method......2222222222222
hello,fanyh!
After method......22222222222222222
After method......1111111111111111111

分析:
在实现MVC模式开发时,可以利用这种方式在action执行前对数据做一切处理,在经过action后再加处理
是不是有点java中的AOP的意思呢?

3
0
分享到:
评论

相关推荐

    mybatis拦截器实现通用权限字段添加的方法

    MyBatis拦截器实现通用权限字段添加的方法 MyBatis拦截器是一种非常实用的技术,可以用来实现各种复杂的数据库操作。本文将详细介绍如何使用MyBatis拦截器来实现通用权限字段添加,达到灵活、可靠、可维护的数据库...

    java 拦截器实现

    这段代码创建了一个简单的Java动态代理拦截器,它在调用`doSomething()`方法前后分别打印出"Before method call..."和"After method call..."。 总的来说,Java拦截器是软件设计中的强大工具,结合责任链模式,...

    mybatis使用拦截器实现分页操作

    在MyBatis中,我们可以通过实现`org.apache.ibatis.plugin.Interceptor`接口并重写`intercept`方法来创建一个自定义拦截器。 分页是数据库操作中常见的需求,传统的做法是在每个查询方法中添加分页逻辑,但这会导致...

    springboot拦截器实现拦截器 权限校验,登录demo

    本文将详细介绍如何在Spring Boot中实现拦截器以进行权限校验和登录验证,通过一个简单的Demo来阐述整个过程。 首先,我们需要创建一个自定义的拦截器类。这个类通常会继承`HandlerInterceptorAdapter`,这是一个...

    浅谈Struts2拦截器的原理与实现.docx

    Struts2还提供了一些抽象类如`AbstractInterceptor`和`MethodFilterInterceptor`,简化了拦截器的实现过程,例如`MethodFilterInterceptor`允许开发者指定要过滤的Action方法。 4. **定义拦截器示例** 下面是一个...

    Struts2拦截器实现权限控制demo

    在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...

    SpringBoot拦截器原理解析及使用方法

    拦截器通常通过实现HandlerInterceptor接口来完成拦截逻辑,这个接口提供了三个主要方法:preHandle、postHandle和afterCompletion。 - preHandle方法在请求处理之前进行调用,也就是Controller方法被调用之前。...

    struts2拦截器实现权限控制

    这篇博客文章“struts2拦截器实现权限控制”深入探讨了如何利用Struts2的拦截机制来执行用户访问权限的验证。 在Struts2中,拦截器是基于AOP(面向切面编程)的概念设计的,它们在Action调用前后执行,可以添加额外...

    运用struts2技术的拦截器实现的页面检测和用户注册

    拦截器是基于Java的动态代理机制实现的,它们在Action调用之前和之后执行,形成一个拦截器链。开发者可以通过配置struts.xml或struts.properties文件来定义拦截器链和其顺序。 1. **创建拦截器** 在Struts2中,...

    拦截器实现权限管理

    在“拦截器实现权限管理”的情况下,通常会有一个权限配置,比如硬编码的规则或从服务器端静态文件加载的规则。这些规则定义了哪些URL对应哪些权限。当用户尝试访问一个页面时,对应的拦截器会被触发,检查当前用户...

    理解拦截器用于在某个方法或字段被访

    在Struts 2中,拦截器的配置主要通过XML配置文件进行,例如在struts-default.xml中,可以定义全局拦截器堆栈,也可以在特定Action的配置中指定局部拦截器。通过这种方式,开发者可以根据需求自定义拦截器链,实现...

    SpringBoot 简单登录功能 拦截器实现.zip

    SpringBoot 简单登录功能 拦截器实现。 在实际开发中,我们经常会遇到某些页面需要登录才能查看的情况。下面使用拦截器实现该功能,在用户没有登录的情况下,将网站的所有访问都指向登录页面。 Springboot 登录

    SpringBoot拦截器实现对404和500等错误的拦截

    首先,创建自定义拦截器类并实现`HandlerInterceptor`接口是实现拦截器功能的第一步。如示例代码所示,我们需要创建一个名为`ErrorInterceptor`的类,并在其中实现`preHandle`和`postHandle`方法。这两个方法都是在...

    struts2 用拦截器 实现用户权限登录

    1. **原理**:拦截器工作在Action调用之前,它通过观察者模式实现,当一个请求到达时,会按照配置的顺序依次执行拦截器链中的方法,直到某个拦截器允许请求继续或者阻止请求。 2. **作用**:拦截器可以用于日志记录...

    spring aop 拦截器简单实现

    本例提供了一个简单的AOP拦截器实现,我们可以从这个基础出发,深入理解和探讨AOP的核心概念、工作原理以及其在实际开发中的应用。 首先,AOP的主要目标是解决程序中的横切关注点,如日志记录、事务管理、性能监控...

    利用struts2拦截器做的简单登录

    本文将深入探讨如何利用Struts2的拦截器实现简单的登录功能。拦截器是Struts2框架的核心组件之一,它允许我们在动作执行前后插入自定义逻辑,比如权限验证、日志记录等。 首先,我们来理解一下Struts2拦截器的工作...

    自定义拦截器的实现以及拦截器的详细配置

    1. **创建拦截器类**:自定义拦截器需要继承Struts2提供的`Interceptor`接口或实现`intercept()`方法。通常,我们会继承`AbstractInterceptor`抽象类,因为它已经为我们提供了默认的`intercept()`实现。 ```java ...

Global site tag (gtag.js) - Google Analytics