php - 关于MVC框架中 模块传参的问题
巴扎黑
巴扎黑 2017-04-10 17:24:57
[PHP讨论组]

1.最近在开发的过程中注意到这样一个现象,通常对数据的CURD操作都会放到模块里面,在控制器调用并传入相应的参数即可!而这种通过形参传递参数的方式我个人是比较反感的!我在想我们能不能在模块里面接收参数在处理呢?这样模块在其他地方就可以随便调用了?而这个模块需要哪些参数自己去了解这个模块就可以了!

大多数人的写法

//模块
public function login($userName,$passWord,$validCode) {
    $param['userName'] = $userName;
    $param['passWord'] = $passWord;
    $param['validCode'] = $validCode;
    return $param;
  }
  
//控制器  
public function test(){
    $userName = $_POST['userName'];
    $passWord= $_POST['passWord'];
    $validCode= $_POST['validCode'];
    $this->login($userName,$passWord,$validCode));
}

我的写法

//模块
public function login() {
    $param['userName'] = $_POST('userName');
    $param['passWord'] = $_POST('passWord');
    $param['validCode'] = $_POST('validCode');
    return $param;
  }
  
//控制器  
public function test(){
    $this->login();
}

可是现在大多数人都是用的第一种写法!我的写法我承认在命令行运行的时候可能会有问题!但我觉得为了代码的简洁我会选择封装一个函数来让我的写法适应各种场景

巴扎黑
巴扎黑

全部回复(4)
巴扎黑

你这样写有一个很明显的问题:

如果你的模块的方法要复用,又不是用的普通的请求方式,例如我想添加一个订单,调用方法是模块的addOrder,但是后这时候我通过其他方式添加,例如excel文件上传,这时候调用模块的addOrder方法,按照你的模块方法是没法添加的,因为这些订单信息是上传时候解析时候生成的,并不是放在$_POST里面的。

天蓬老师

每个人思考问题的角度都不相同,对于MVC的看法也不同;

下面是我个人的观点:


Controller相当于一个工厂的调度科,接收来自Boss的指令(参数),再根据指令调度Model或View;

如果涉及业务逻辑,为了避免Controller肥大;调度者就需要一个助理,这个助理就是Service,既然有了这个助理,那么Controller何不把任务下发给Service,在Service中合理拆分任务;

除了Controller可以找助理,MVC中各组件都可以使用助理来辅助其完成任务;

用户即Boss--访问-->Route--参数-->Controller--下达指令-->Service......
迷茫

当程序需要异步执行的时候,这种方式显然不妥。

PHP中文网

参数的传递有很多种形式,这样写不是不可以,只是复用性降低了,特别是功能多了就会使代码变得臃肿

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号