首页 > 编程 > PHP > 正文

thinkphp控制器调度使用示例

2020-03-22 17:02:32
字体:
来源:转载
供稿:网友
1.如何通过地址栏参数来得到模块名称和控制器名称(即使在有路由和开了重写模块的情况下) 2.tp是如何实现前置,后置方法功能模块,和如何执行带参数的方法?php系统自带的 ReflectionClass,ReflectionMethod 类,可以反射用户自定义类的中属性,方法的权限和参数等信息,通过这些信息可以准确的控制方法的执行ReflectionClass主要用的方法:
hasMethod(string) 是否存在某个方法
getMethod(string) 获取方法ReflectionMethod 主要方法:
getNumberOfParameters() 获取参数个数
getParamters() 获取参数信息3.代码演示复制代码 代码如下:
?php
html' target='_blank'>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教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表