PHP之回调函数传参(解决eval函数拼接对象参数的问题)
2015-06-05 12:58
573 查看
在使用Smarty时,定义了一个统一调用控制器的函数,如下:
但是该函数只能调用控制器中无参的函数,但是我想利用该函数传入参数,然后将参数传入控制器,改造如下
因为要考虑多个参数了问题,所有就把第三个参数设成数组类型,然会自动分割成"param1, param2, param3"的格式传入。
现在问题来了,如果传入的是对象怎么办,系统无法把对象转成字符串使用,如果强行传入会报错,所有
先判断下传入的参数时不是对象,如果是,采用回调函数的方式调用,否则,按照之前的数组的方式调用。
问题解决了!!!
function C($name, $method){//控制器的名称和其中方法的名称 require_once "controller/".$name."Controller.class.php";//引入控制器 eval('$obj = new '.$name.'Controller();$obj->'.$method.'();');//实例化控制器并调用方法 }
但是该函数只能调用控制器中无参的函数,但是我想利用该函数传入参数,然后将参数传入控制器,改造如下
function C($name, $method, $arr = []){ require_once "controller/".$name."Controller.class.php"; $params = implode(",", $arr); eval('$obj = new '.$name.'Controller();$obj->'.$method.'('.$params.');'); }
因为要考虑多个参数了问题,所有就把第三个参数设成数组类型,然会自动分割成"param1, param2, param3"的格式传入。
现在问题来了,如果传入的是对象怎么办,系统无法把对象转成字符串使用,如果强行传入会报错,所有
eval('$obj = new '.$name.'Controller();$obj->'.$method.'('.$params.');'); 的方式并没有什么卵用 为了解决传入参数为对象的问题,想起了回调函数
function C($name, $method, $arr = []){ require_once "controller/".$name."Controller.class.php"; $params = ""; if(!is_object($arr)){ $params = implode(",", $arr); eval('$obj = new '.$name.'Controller();$obj->'.$method.'('.$params.');'); }else{ eval('$obj = new '.$name.'Controller();'); call_user_func(array($obj, $method), $arr); } }
先判断下传入的参数时不是对象,如果是,采用回调函数的方式调用,否则,按照之前的数组的方式调用。
问题解决了!!!
相关文章推荐
- php中关于string编码的问题
- 关于ECSHOP模板架设的服务器php版本过高报错的解决方法集合
- PHP 基础知识代码总结
- PHP+mysql统计排名第几位
- PHP语法注意事项
- FTP 1.0
- php-fpm占用系统资源分析
- 简单的thinkPHP3.2运行实例。
- PHP通过串口发短信
- phpcms手机内容页面添加上一篇和下一篇
- PHP 正则表达式常用函数使用小结
- php环境安装及搭建
- phpstorm
- ThinkPHP实现支付宝接口功能
- Yii2 Model的一些常用rules规则
- thinkphp
- yii2.0 ajax无法提交问题
- 如何学习PHP的菊花宝典
- PHP 正则表达式
- php 汉字转拼音 [包含20902个基本汉字+5059生僻字]