日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php cli 编程,php-cli下编程如何分层架构、面向对象、统一入口文件?

發(fā)布時(shí)間:2025/3/15 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php cli 编程,php-cli下编程如何分层架构、面向对象、统一入口文件? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以往寫cli下運(yùn)行的業(yè)務(wù)或者測試代碼,總是新建文件,面向過程編寫代碼。幾次之后,cli目錄下好多文件,即便勉強(qiáng)在一個(gè)cli測試文件中寫了一個(gè)類,也是讓其中的一個(gè)方法自啟動(dòng),要測試別的方法,總是要修改代碼,很是繁瑣。昨天接觸了phalcon的cli, 猶如醍醐灌頂, 特此發(fā)文分享。

首先,溫故而知新:

在瀏覽器中訪問php:

http(s)://test.php.local/index.php?m=front&c=order&a=getList&p=2&cate=1調(diào)試期間,每次都敲m、c、a,太繁瑣了,url簡化一下:

http(s)://test.php.local/index.php/front/order/getList?p=2&cate=1然后,index.php會(huì)做的事情必定包括:

加載配置文件加載Autoload.php, 各種function.phpDispatcher::run();初始化Db類(此時(shí)并沒有連接mysql)分析url, 得到front/order/getList, 之后,$obj = new /app/front/controller/Order();$obj->getList(); //別擔(dān)心Autoload類幫我們自動(dòng)加載類文件....在cli中,我們這樣訪問php:(先用cd進(jìn)入項(xiàng)目根目錄)

php public/cli.php--m cli --c order --a updateMarketPrice --param value文件名之后,就是“--參數(shù) 值 --參數(shù) 值 ” 這么有規(guī)律,可以直接用getopt()獲取m、c、a參數(shù):

$arr = [ 'm:', 'a:', 'c:' ];$mca = getopt( '', $arr );注意,如果企圖簡化為:

php public/cli.php/cli/order/updateMarketPrice --param value那么在linux中,public/cli.php/cli/order/updateMarketPrice會(huì)被認(rèn)為是一個(gè)文件,因?yàn)椴淮嬖?#xff0c;導(dǎo)致打開失敗

據(jù)本猿所知,有2種簡化方式:

php public/cli.php cli/order/updateMarketPrice --param value或者php public/cli.php cli order updateMarketPrice --param value文件名之后,不是以--開頭, getopt()不認(rèn)識(shí),就罷工了,還好有php自帶的全局變量$argv,它是一個(gè)數(shù)組(以第2種方式為例):

之后,便是分析$argv這個(gè)數(shù)組,取得m、c(此處實(shí)際應(yīng)該叫t, task)、a, 組合數(shù)組$paramsArr, 以便給業(yè)務(wù)方法用。

cli.php必然也做以下事情:

加載配置文件加載Autoload.php, 各種function.phpCliDispatcher::run();初始化Db類(此時(shí)并沒有連接mysql)分析url, 得到front/order/getList, 之后,$obj = new /app/cli/task/Order(); $obj->updateMarketPrice($paramsArr); //別擔(dān)心, Autoload類幫我們自動(dòng)加載類文件....注意:

另起CliDispatcher類。 Dispatcher類已經(jīng)通過了重重考驗(yàn),不要再動(dòng)它了,再說,這也不符合面向?qū)ο蟮脑瓌t之一:對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉

使用Task而不是controller, 是為了避免這樣的情況:控制器中業(yè)務(wù)需要調(diào)用cli模塊中的方法發(fā)送微信模板消息什么的,代碼寫著寫著,走神了,直接new /app/cli/task/Order();

由于AutoLoad類認(rèn)定控制器一定在controller目錄在,而cli模塊卻是放在task目錄下,導(dǎo)致加載失敗,拋出錯(cuò)誤, 同時(shí)輸出建議,就像一盆涼水一樣立即“澆醒”開發(fā)者,想想,要是cli模塊是放在controller目錄下, 還被順利執(zhí)行...

和cgi下不同,沒有$_GET, 沒有$_POST, 而且$_SERVER中關(guān)于url的各種信息也是沒有的,記得給予參數(shù),不然,取參(“餐”)無門..

$obj->updateMarketPrice($paramsArr);

cli模塊的各種logic類, 記得判斷是否php是否在cli下運(yùn)行,以免被其他cig下運(yùn)行的模塊直接調(diào)用各位小伙伴,請(qǐng)?jiān)谠u(píng)論中留下你的見解。

舉報(bào)/反饋

總結(jié)

以上是生活随笔為你收集整理的php cli 编程,php-cli下编程如何分层架构、面向对象、统一入口文件?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。