首先吐槽下


頭疼

自從開始接觸php以來其實(shí)一直很是頭疼糖耸,做為一個(gè)從Dos時(shí)代成長起來的Windows平臺(tái)C/C++老程序員,最不理解的是這些腳本式語言的程序結(jié)構(gòu)和模塊加載的方式桃焕。
原來這些編譯式語言多好啊瓶盛,在語言層面上定義了程序入口和第三方模塊加載機(jī)制惯疙。比如C/C++中只有三種方式:源碼钱床、靜態(tài)庫荚斯、動(dòng)態(tài)庫,分別對(duì)應(yīng)著編譯查牌、鏈接事期、運(yùn)行三個(gè)階段,這樣調(diào)用方只要知道函數(shù)/類原型即可調(diào)用(無論是include對(duì)方提供的頭文件還是手寫入聲明)纸颜。一切問題都解決在程序運(yùn)行前——只要編譯通過了說明引入的模塊都到位了兽泣,程序結(jié)構(gòu)沒有大問題,剩下就是在運(yùn)行時(shí)解決邏輯問題胁孙。

框架超越語言

編譯式語言程序結(jié)構(gòu)是強(qiáng)耦合的撞叨,如果將它比喻為組織嚴(yán)謹(jǐn)?shù)恼?guī)軍,那腳本式絕對(duì)是游兵散勇浊洞,每個(gè)人都能扯出來單干,如果解決了溝通問題組織起來打群架也行胡岔!
正因?yàn)槟_本式語言沒在語言層面上唯一的限定/規(guī)定程序結(jié)構(gòu)和模塊交互方式法希,所以一大堆的框架襲來了!0腥场苫亦!每個(gè)人都充分發(fā)揮自己的聰明才智,各種奇技淫巧創(chuàng)造了出來怨咪,框架越來越重甚至超過了語言本身屋剑。
所以在這個(gè)年代的程序員自我介紹時(shí)不僅要提語言領(lǐng)域還要專門指出熟悉某某框架等等。同樣的php程序員熟悉thinkphp未必能用laravel诗眨,會(huì)用react的javascript程序員要學(xué)vue還得花點(diǎn)功夫熟悉vue的語法唉匾。
同一語言的框架與框架之間的籬笆很高,學(xué)習(xí)曲線幾乎像跨越語言一般的陡峭!

一點(diǎn)一點(diǎn)來吧

近幾年一直想把自己Web領(lǐng)域的開發(fā)技能點(diǎn)加上巍膘。
自搞某型號(hào)項(xiàng)目開始接觸Web開發(fā)厂财。一開始,弄個(gè)表格都要研究半天table/tr/td這些標(biāo)簽峡懈,看到兩個(gè)雙括號(hào)包起來的變量從后臺(tái)傳到前臺(tái)璃饱,竟然好久之后才知道這叫el表達(dá)式。哈哈
我始終認(rèn)為程序員的基本功底是“模仿-改進(jìn)”肪康,或許還可以加上個(gè)“揣摩”荚恶,變成“模仿-揣摩-改進(jìn)”。揣摩的過程很能考驗(yàn)一個(gè)程序員的功力和知識(shí)構(gòu)成磷支。是否能深入理解底層運(yùn)行機(jī)制決定了初學(xué)者能否順利跨過某個(gè)新領(lǐng)域的門檻谒撼。
就我自己來說,從剛接觸Web開發(fā)的慌亂中走出來大約經(jīng)歷了兩三個(gè)月的時(shí)間齐唆。初期是為了盡快碼出代碼趕上進(jìn)度嗤栓,只會(huì)用Ctrl+V和Ctrl+C。每增加一個(gè)新功能箍邮,都是先找類似頁面的拷貝過來茉帅,改改頁面文字,運(yùn)行看看锭弊,沒報(bào)錯(cuò)堪澎,好了,修改java類味滞,再運(yùn)行看看...當(dāng)時(shí)很茫然樱蛤,連個(gè)類的命名都要遵守特定的規(guī)則才行,否則就會(huì)報(bào)錯(cuò)找不到剑鞍,感覺規(guī)則很多很雜而且是無理由的強(qiáng)制性的昨凡,不禁感慨Web程序員太辛苦太局限,真正是碼農(nóng)蚁署。

我對(duì)Web程序的理解

后來就開始“揣摩”便脊,把瀏覽器和服務(wù)器交互的一個(gè)完整流程放到tcp層上去考慮。瀏覽器無非是發(fā)起了個(gè)到服務(wù)器的tcp80端口上的鏈接光戈,然后把請(qǐng)求地址等參數(shù)打個(gè)包發(fā)送過去哪痰,服務(wù)器接收到后向?yàn)g覽器回送個(gè)響應(yīng)包然后斷開鏈接。響應(yīng)中包含200/404之類的響應(yīng)參數(shù)等久妆,至于網(wǎng)頁內(nèi)容其實(shí)就是個(gè)長字符串晌杰,大致包含<html><head></head><body>...</body></html>這樣的內(nèi)容。瀏覽器接收到響應(yīng)包后筷弦,先按網(wǎng)頁標(biāo)簽顯示內(nèi)容肋演,然后執(zhí)行包含的script,待用戶執(zhí)行操作后再發(fā)起下一次交互。
在這個(gè)基礎(chǔ)上再去看Web開發(fā)的一些基本概念:session惋啃、cookie哼鬓,就很明白了,無非就是一些數(shù)據(jù)塊边灭。cookie存放在瀏覽器端异希,要隨著每次的請(qǐng)求發(fā)送到服務(wù)器端,服務(wù)器端就是通過cookie里的特定標(biāo)識(shí)來把一次次的獨(dú)立的/毫無關(guān)聯(lián)的請(qǐng)求/響應(yīng)流程關(guān)聯(lián)起來绒瘦,從而衍生出session的概念(session在不支持cookie的瀏覽器上可以通過請(qǐng)求參數(shù)來實(shí)現(xiàn)称簿,根本原理類似)。
從一個(gè)C/C++程序員角度看惰帽,一個(gè)Web服務(wù)器實(shí)現(xiàn)的大致處理流程:

  • 1.監(jiān)聽端口憨降,接受傳入鏈接
  • 2.接收請(qǐng)求數(shù)據(jù)
  • 3.提取Url和get/post的參數(shù)
  • 4.按約定將Url處理映射到特定類的方法<-在這之前應(yīng)該就已經(jīng)完成了請(qǐng)求參數(shù)到語言變量的轉(zhuǎn)換
  • 5.調(diào)用處理方法,方法函數(shù)體內(nèi)執(zhí)行流程產(chǎn)生的一些列數(shù)據(jù)結(jié)構(gòu)向頁面映射该酗,如果還有頁面引擎則執(zhí)行授药,典型的如el表達(dá)式展開,jstl標(biāo)簽處理等等呜魄,或如laravel中blade引擎等
  • 6.將最終結(jié)果通過response返回
  • 7.關(guān)閉鏈接

框架悔叽!框架!

所有的Web框架大致都是針對(duì)3爵嗅、4娇澎、5、6步來提供解決方案的睹晒。關(guān)鍵的技術(shù)點(diǎn)包括:

  • 1.請(qǐng)求參數(shù)映射
  • 2.Url處理映射趟庄,也就是所謂的路由(Route)
  • 3.模塊搜索、掛載伪很,并在處理過程提供插針點(diǎn)戚啥,供過濾、授權(quán)锉试、日志等功能使用
  • 4.數(shù)據(jù)庫訪問接口
  • 5.輔助功能:頁面引擎虑鼎、數(shù)據(jù)緩存...
    通過這些分析,我們略微把握住了一點(diǎn)兒框架的脈絡(luò)键痛,學(xué)習(xí)起來心理負(fù)擔(dān)就減輕了一些,少了些茫然多了些從容匾七!

結(jié)束語

寫著寫著就扯遠(yuǎn)了絮短,加個(gè)分割線往回拉拉!


為什么選擇了PHP昨忆?
用java渡過了Web程序開發(fā)初學(xué)期丁频,但可能是因?yàn)轫?xiàng)目的原因,或著C/C++程序員偏見,對(duì)java始終無感席里。說出來你們可能不信叔磷,在國產(chǎn)平臺(tái)上(龍芯+麒麟),啟動(dòng)項(xiàng)目整個(gè)后臺(tái)需要近一個(gè)小時(shí)奖磁!哈哈改基,每次敲入./startup.sh后,大家都很開心的玩一會(huì)兒咖为。另外秕狰,作為C/C++程序員,則是最討厭那巨多的xml配置文件躁染,亂糟糟的鸣哀,每次改一點(diǎn)兒都要重啟tomcat,很煩吞彤。
最后選擇了PHP卻是一個(gè)同事的經(jīng)歷打動(dòng)了我我衬。幾年前,他幫學(xué)校開發(fā)了一個(gè)單位機(jī)關(guān)測(cè)評(píng)系統(tǒng)的小項(xiàng)目饰恕,用的是asp.net WebForm技術(shù)平臺(tái)挠羔,部署在機(jī)房也就200左右的客戶端,同時(shí)訪問iis就卡頓的要死懂盐。最后連夜請(qǐng)另外一個(gè)同事用PHP對(duì)付了一個(gè)系統(tǒng)褥赊,竟然好好的,順利完成了評(píng)測(cè)保障任務(wù)~我聽說后對(duì)PHP心儀不已±蚰眨現(xiàn)在既然自由選擇技術(shù)平臺(tái)拌喉,當(dāng)然首選PHP了。
于是就開始看基礎(chǔ)語法俐银,接下來選框架工坊。thinkphp,看到吐槽甚多戚长,pass晋被。laravel,號(hào)稱最優(yōu)雅的框架吱七,就它了汽久!于是就開始了laravel入坑之旅。
學(xué)習(xí)的過程還是比較坎坷的踊餐。畢竟對(duì)Web開發(fā)領(lǐng)域一知半解的景醇,拿laravel練了練demo小項(xiàng)目,感覺html+css欠賬太多吝岭,稍微微一點(diǎn)兒布局的效果都扣哧半天三痰,就停下手來把css和div布局研究了下吧寺。接下來學(xué)習(xí)前臺(tái)的javascript和jquery,反反復(fù)復(fù)看了幾本書散劫,算入門了稚机。再后來又入vue.js的坑,補(bǔ)了node相關(guān)知識(shí)获搏,以及前臺(tái)的工具鏈:gulp赖条、Elixir、Mix颜凯、webpack...
當(dāng)從vue.js的坑里爬出來時(shí)谋币,還真的有點(diǎn)闊然開朗的感覺:一是,這么大致細(xì)細(xì)的趟了一圈症概,前臺(tái)蕾额、后臺(tái)、ide彼城、工具鏈都下手實(shí)踐了下诅蝶,勉強(qiáng)也稱得上個(gè)“全棧”了募壕;二是调炬,這些技術(shù)平臺(tái)上的包管理體系,以及前臺(tái)資源(js舱馅、css缰泡、圖片、字體)自動(dòng)編譯代嗤、打包棘钞、熱加載等等讓我等C/C++程序員(哈哈,感覺這個(gè)詞出現(xiàn)次數(shù)太多了8梢恪)耳目一新宜猜,咱確實(shí)是有點(diǎn)落伍了!

再加個(gè)分割線~~


曾經(jīng)滄海難為水硝逢,除卻巫山不是云姨拥。
現(xiàn)在回頭再研究laravel框架從容淡定多了,爭取把學(xué)習(xí)和研究過程記錄整理成為一個(gè)系列以備忘渠鸽。
如果有人看到我寫的東西叫乌,不要奇怪我的學(xué)習(xí)進(jìn)度和順序,因?yàn)槲仪『脤W(xué)到這兒并打這兒開始記錄徽缚。
如果我寫的有問題综芥,敬請(qǐng)指出好共同進(jìn)步。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猎拨,一起剝皮案震驚了整個(gè)濱河市膀藐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌红省,老刑警劉巖额各,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吧恃,居然都是意外死亡虾啦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門痕寓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來傲醉,“玉大人,你說我怎么就攤上這事呻率∮脖希” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵礼仗,是天一觀的道長吐咳。 經(jīng)常有香客問我,道長元践,這世上最難降的妖魔是什么韭脊? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮单旁,結(jié)果婚禮上沪羔,老公的妹妹穿的比我還像新娘。我一直安慰自己象浑,他們只是感情好蔫饰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著融柬,像睡著了一般死嗦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粒氧,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天越除,我揣著相機(jī)與錄音,去河邊找鬼外盯。 笑死摘盆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饱苟。 我是一名探鬼主播孩擂,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼箱熬!你這毒婦竟也來了类垦?” 一聲冷哼從身側(cè)響起狈邑,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚤认,沒想到半個(gè)月后米苹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砰琢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年蘸嘶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陪汽。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡训唱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挚冤,到底是詐尸還是另有隱情况增,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布你辣,位于F島的核電站巡通,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏舍哄。R本人自食惡果不足惜宴凉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望表悬。 院中可真熱鬧弥锄,春花似錦、人聲如沸蟆沫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饭庞。三九已至戒悠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舟山,已是汗流浹背绸狐。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留累盗,地道東北人寒矿。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像若债,于是被迫代替她去往敵國和親符相。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蠢琳,服務(wù)發(fā)現(xiàn)啊终,斷路器镜豹,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 我經(jīng)常在思考一個(gè)問題:如果我現(xiàn)在離開單位逛艰,去另一家單位應(yīng)聘,我的價(jià)值是升值搞旭?降值?還是平行菇绵? 7年前肄渗,我從廣告行業(yè)...
    韓同志閱讀 293評(píng)論 0 1
  • 01 有段時(shí)間沒在這里讀詩了,一個(gè)原因是懶惰咬最,嫌麻煩翎嫡。先要找到一首自己喜歡的詩,靜下心來讀幾遍永乌,以防讀錯(cuò)字惑申,斷錯(cuò)句...
    2H青年閱讀 354評(píng)論 3 2