thinkphp控制器调度使用示例

2015-01-24信息快讯网

这篇文章主要介绍了thinkphp控制器调度使用示例,需要的朋友可以参考下

1.如何通过地址栏参数来得到模块名称和控制器名称(即使在有路由和开了重写模块的情况下)

2.tp是如何实现前置,后置方法功能模块,和如何执行带参数的方法?

php系统自带的 ReflectionClass,ReflectionMethod 类,可以反射用户自定义类的中属性,方法的权限和参数等信息,通过这些信息可以准确的控制方法的执行

ReflectionClass主要用的方法: 
hasMethod(string)  是否存在某个方法
getMethod(string)   获取方法

ReflectionMethod 主要方法: 
getNumberOfParameters()  获取参数个数
getParamters()  获取参数信息

3.代码演示

<?php 
class IndexAction{
 public function index(){
   echo 'index'."\r\n";
 }
 public function test($year=2012,$month=2,$day=21){
   echo $year.'--------'.$month.'-----------'.$day."\r\n";
 }
 public function _before_index(){
   echo __FUNCTION__."\r\n";
 }
 public function _after_index(){
   echo __FUNCTION__."\r\n";
 }
}

//执行index方法 $method = new ReflectionMethod('IndexAction','index'); //进行权限判断 if($method->isPublic()){ $class = new ReflectionClass('IndexAction'); //执行前置方法 if($class->hasMethod('_before_index')){ $beforeMethod = $class->getMethod('_before_index'); if($beforeMethod->isPublic()){ $beforeMethod->invoke(new IndexAction); } }

$method->invoke(new IndexAction);

//执行后置方法 if($class->hasMethod('_after_index')){ $beforeMethod = $class->getMethod('_after_index'); if($beforeMethod->isPublic()){ $beforeMethod->invoke(new IndexAction); } } }

//执行带参数的方法 $method = new ReflectionMethod('IndexAction','test'); $params = $method->getParameters(); foreach($params as $param ){ $paramName = $param->getName(); if(isset($_REQUEST[$paramName])) $args[] = $_REQUEST[$paramName]; elseif($param->isDefaultValueAvailable()) $args[] = $param->getDefaultValue(); } if(count($args)==$method->getNumberOfParameters()) $method->invokeArgs(new IndexAction,$args); else echo 'parameters is not match!';

php mb_substr()函数截取中文字符串应用示例
php CI框架插入一条或多条sql记录示例
两种设置php载入页面时编码的方法
php ci框架中加载css和js文件失败的原因及解决方法
php switch语句多个值匹配同一代码块应用示例
PHP实现把文本中的URL转换为链接的auolink()函数分享
Win2003+apache+PHP+SqlServer2008 配置生产环境
windows的文件系统机制引发的PHP路径爆破问题分析
thinkphp学习笔记之多表查询
2个Codeigniter文件批量上传控制器写法例子
PHP 5.3新增魔术方法__invoke概述
ThinkPHP单字母函数(快捷方法)使用总结
ThinkPHP实现将SESSION存入MYSQL的方法
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
ThinkPHP权限认证Auth实例详解
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
ThinkPHP3.2.2的插件控制器功能简述
php小技巧之过滤ascii控制字符
yii框架通过控制台命令创建定时任务示例
PHP获取本周第一天和最后一天示例代码
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
将php数组输出html表格的方法
php格式化日期和时间格式化示例分享
php目录操作实例代码
php无限遍历目录示例
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
PHP中ini_set和ini_get函数的用法小结
php中sprintf与printf函数用法区别解析
php的sprintf函数的用法 控制浮点数格式
php中的路径问题与set_include_path使用介绍
thinkphp3查询mssql数据库乱码解决方法分享
修改apache配置文件去除thinkphp url中的index.php
那些年我们错过的魔术方法(Magic Methods)
利用浏览器的Javascript控制台调试PHP程序
PHP中对缓冲区的控制实现代码
PHP时间格式控制符对照表分享
PHP 关于访问控制的和运算符优先级介绍
©2014-2024 dbsqp.com