thinkphp控制器调度使用示例
发布时间:2023-11-16 12:34:15
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!';


猜你喜欢
- pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使
- 下拉菜单平常见到的都是用js来实现的,本文介绍的方法是使用纯CSS实现导航下拉菜单功能,代码符合标准,兼容性好且环保,制作下拉菜单的不错选择
- 本文实例讲述了Python程序控制语句用法。分享给大家供大家参考,具体如下:1、换行在Python中默认换行结束一个语句而不是使用分号,而如
- 由于可将 Microsoft? SQL Server? 2000 设置为包含一个或多个命名实例和一个默认实例(也可无),所以要用新命名规则来
- 如: 0.625 取 1 2.1 取3 3.6 取4 <% if fix(a)>a then b=fix(a) else b=f
- 一、简化代码采用更为简短的写法,不仅可以减少输入的字符数,还可以减少文件大小。大部分采用简单写法的代码,执行效率都有轻微提高。1.1&nbs
- 用鼠标创建小球,一个蹦来蹦去的解压小游戏…… 本次需要的外置包:pygame,pymu
- 这两个字符串真实长度和取固定长度的字符串函数是在 photo.163.com 的js文件里看到的。 作者&nb
- 直接给源代码了:$current_dir = 'E:/temp/';$dir = opendir($current_dir)
- 有些页面并不能直接用requests获取到内容,会动态执行一些js代码生成内容。这个文章主要是对付那些特殊页面的,比如必须要进行js调用才能
- 由 John Resig 的 How JavaScript Timers Work 可以知道,现有的 JavaScript 引擎是单线程处理
- flask是我学习的第一个python的web框架,在应用flask写完一个应用后,当然是把它部署到我们的服务器上了。首先,准备我们部署项目
- 但是Class这个东西,如果用得比较少,充其量只是一个大模块的包装方式. 只有大规模地用它来开发,才能显出它对项目管理的优越性来. 所谓的意
- 本文实例讲述了python flask框架实现重定向功能。分享给大家供大家参考,具体如下:flask 重定向:from flask impo
- 一、朋友圈九宫格效果图二、图片基本操作打开要处理的图片判断打开的图片是否为正方形如果是正方形,就进行九等分,如果不是正方形,先用白色填充为正
- 和其他语言不一样,传递参数的时候,python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际
- 本文实例讲述了Python遍历zip文件输出名称时出现乱码问题的解决方法。分享给大家供大家参考。具体如下:windows中使用python2
- 然后我们在Interactive Python prompt中测试了一下:>>> import subprocess &n
- 前言在本文中,我们将介绍一些常见的分布并通过Python 代码进行可视化以直观地显示它们。概率和统计知识是数据科学和机器学习的核心;&nbs
- //遍历option和添加、移除optionfunction changeShipMethod(shipping){ var le