首页 » PHP教程 » phpdispatcher技巧_phpcli下编程若何分层架构面向对象统一进口文件

phpdispatcher技巧_phpcli下编程若何分层架构面向对象统一进口文件

duote123 2024-11-10 0

扫一扫用手机浏览

文章目录 [+]

首先,温故而知新:

在浏览器中访问php:

phpdispatcher技巧_phpcli下编程若何分层架构面向对象统一进口文件

http(s)://test.php.local/index.php?m=front&c=order&a=getList&p=2&cate=1

调试期间,每次都敲m、c、a,太繁琐了,url简化一下:

phpdispatcher技巧_phpcli下编程若何分层架构面向对象统一进口文件
(图片来自网络侵删)

http(s)://test.php.local/index.php/front/order/getList?p=2&cate=1

然后,index.php会做的事情必定包括:

加载配置文件加载Autoload.php, 各种function.php

Dispatcher::run();初始化Db类(此时并没有连接mysql)剖析url, 得到front/order/getList, 之后,

$obj = new /app/front/controller/Order();$obj->getList(); //别担心Autoload类帮我们自动加载类文件....

在cli中,我们这样访问php:(先用cd进入项目根目录)

php public/cli.php--m cli --c order --a updateMarketPrice --param value

文件名之后,便是“--参数 值 --参数 值 ” 这么有规律,可以直接用getopt()获取m、c、a参数:

$arr = [ 'm:', 'a:', 'c:' ];$mca = getopt( '', $arr );

把稳,如果企图简化为:

php public/cli.php/cli/order/updateMarketPrice --param value

那么在linux中,public/cli.php/cli/order/updateMarketPrice会被认为是一个文件,由于不存在,导致打开失落败

据本猿所知,有2种简化办法:

php public/cli.php cli/order/updateMarketPrice --param value或者php public/cli.php cli order updateMarketPrice --param value

文件名之后,不因此--开头, getopt()不认识,就罢工了,还好有php自带的全局变量$argv,它是一个数组(以第2种办法为例):

之后,便是剖析$argv这个数组,取得m、c(此处实际该当叫t, task)、a, 组合数组$paramsArr, 以便给业务方法用。

cli.php一定也做以下事情:

加载配置文件加载Autoload.php, 各种function.php

CliDispatcher::run();初始化Db类(此时并没有连接mysql)剖析url, 得到front/order/getList, 之后,

$obj = new /app/cli/task/Order(); $obj->updateMarketPrice($paramsArr); //别担心, Autoload类帮我们自动加载类文件....

把稳:

另起CliDispatcher类。
Dispatcher类已经通过了重重磨练,不要再动它了,再说,这也不符合面向工具的原则之一:对扩展开放,对修正关闭

利用Task而不是controller, 是为了避免这样的情形:

掌握器中业务须要调用cli模块中的方法发送微信模板什么的,代码写着写着,走神了,直接new /app/cli/task/Order();

由于AutoLoad类认定掌握器一定在controller目录在,而cli模块却是放在task目录下,导致加载失落败,抛出错误, 同时输出建议,就像一盆凉水一样立即“浇醒”开拓者,想想,假如cli模块是放在controller目录下, 还被顺利实行...

和cgi下不同,没有$_GET, 没有$_POST, 而且$_SERVER中关于url的各种信息也是没有的,记得给予参数,不然,取参(“餐”)无门..

$obj->updateMarketPrice($paramsArr);

cli模块的各种logic类, 记得判断是否php是否在cli下运行,以免被其他cig下运行的模块直接调用

各位小伙伴,请在评论中留下你的见地。

标签:

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读0 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读0 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读0 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读0 评论0