選擇Codeigniter作為PHP框架

這個(gè)標(biāo)題只是個(gè)引子,雖然 PHP 很簡(jiǎn)單,能夠快速進(jìn)行開(kāi)發(fā),但是也有很多弊病,比如說(shuō)由于缺乏有效的限制從而導(dǎo)致寫出“壞”代碼。那么如何解決這些弊病呢?使用 PHP 開(kāi)發(fā)框架能很好的解決。

使用框架的根本好處就是提升生產(chǎn)力,比如開(kāi)發(fā)效率、開(kāi)發(fā)質(zhì)量、可維護(hù)性等等。

PHP 框架有很多,選擇合適的卻不容易,這篇博文就簡(jiǎn)單說(shuō)說(shuō)框架,假如你是一個(gè)新手,希望能夠幫助你。

框架的基本定義

一個(gè)應(yīng)用程序框架一般是基于一種標(biāo)準(zhǔn)的框架結(jié)構(gòu)、這種結(jié)構(gòu)是你在寫代碼的時(shí)候必須遵守的,同時(shí)框架也提供了很多類庫(kù)和工具,框架結(jié)構(gòu)讓你能夠?qū)懗龈?guī)范的代碼,而工具和類庫(kù)讓你能夠提高開(kāi)發(fā)速度。

一個(gè)框架一般使用 MVC 設(shè)計(jì)模式,設(shè)計(jì)模式很多也很難學(xué),我更傾向稱 MVC 是一種架構(gòu),同時(shí) MVC 也比較容易理解(相對(duì)的)。

框架的基本功能

對(duì)于一個(gè)框架來(lái)說(shuō),功能應(yīng)該包含基礎(chǔ)性功能和功能性功能,基礎(chǔ)性功能是精髓,主要是為了解決 WEB 開(kāi)發(fā)中的核心問(wèn)題,而功能性功能則是錦上添花,一般是解決特定問(wèn)題的類庫(kù)。

  • 路由規(guī)則,路由規(guī)則是和代碼的結(jié)構(gòu)一一綁定的。
  • 邏輯,模型,視圖分離,這也是建立在 MVC 應(yīng)用架構(gòu)基礎(chǔ)上的。
  • 可擴(kuò)展,框架不僅僅讓你去業(yè)務(wù)代碼,也可以由框架創(chuàng)造框架。
  • 提供單元測(cè)試工具。
  • 應(yīng)用安全機(jī)制。
  • 提供強(qiáng)大的日志功能,Debug 功能。
  • 大量的類庫(kù)包和工具,框架可以自由的引入第三方的類庫(kù)包(比如 Composer)

框架的好處

那么框架是如何具體提高生產(chǎn)力的呢,歸納如下:

  • 避免造輪子,在學(xué)習(xí)過(guò)程中造輪子是一種實(shí)踐,在工作過(guò)程中造輪子不明智(大部分情況如此)。
  • 節(jié)省時(shí)間,WEB 項(xiàng)目大部分邏輯可能是相同的(CRUD操作,Session管理,權(quán)限驗(yàn)證),假如不使用框架,就要不斷的重復(fù)寫,這是一種時(shí)間浪費(fèi)。同時(shí)由于沒(méi)有良好的規(guī)約,會(huì)經(jīng)常性犯同樣的錯(cuò)誤。
  • 標(biāo)準(zhǔn)化代碼結(jié)構(gòu)
    代碼目錄結(jié)構(gòu)如何組織?如何引用文件?對(duì)于這些事情,框架大部分提供了很好的規(guī)約,而你要做的就是去遵循,比如業(yè)務(wù)邏輯應(yīng)該在控制層,數(shù)據(jù)層應(yīng)該在模型層(針對(duì) MVC 模式來(lái)說(shuō)),良好的框架應(yīng)該會(huì)強(qiáng)迫你去遵守,沒(méi)有規(guī)則不成方圓。
  • 代碼,系統(tǒng)擴(kuò)展性更好
    代碼能夠在Windows上運(yùn)行嗎?代碼能在所有 PHP 版本中運(yùn)行嗎?底層數(shù)據(jù)庫(kù)從Mysql換成Sqlserver,代碼還能運(yùn)行嗎?框架基本上能優(yōu)雅的解決這些問(wèn)題,讓你專注于業(yè)務(wù)編寫,排除其他的干擾(當(dāng)然這樣的干擾對(duì)學(xué)習(xí)很有幫助)。
  • 系統(tǒng)更安全
    誰(shuí)也不能保證自己寫的代碼是完全安全的,而框架經(jīng)過(guò)千錘百煉,提供了很好的代碼保護(hù)(你甚至可能不知道如何是保護(hù)的),從結(jié)果上來(lái)說(shuō),框架會(huì)限制你的行為,會(huì)提供好的工作機(jī)制讓代碼更安全。
  • 提高代碼質(zhì)量
    框架能夠讓編寫的代碼更安全,更容易維護(hù),更好讀。
  • 充分利用開(kāi)源的力量
    框架 80% 的部分提供了很多包(稱為類庫(kù))和 工具,這些包和工具解決了很多復(fù)雜的問(wèn)題,比如說(shuō)快速通過(guò)這些包生成驗(yàn)證碼,通過(guò)工具快速構(gòu)建一個(gè)數(shù)據(jù)庫(kù)表。這也說(shuō)明了二點(diǎn),你要盡可能的使用穩(wěn)定的開(kāi)源包,另外也避免了造輪子。

什么樣的框架是好的

選擇框架的標(biāo)準(zhǔn)很重要,每個(gè)人的編碼能力,理解能力,工作特點(diǎn),這些驅(qū)使你應(yīng)該選擇合適的框架,而不是最流行的框架。

  • 要注意框架的執(zhí)行速度,使用框架可能節(jié)省開(kāi)發(fā)時(shí)間,但是帶來(lái)部分性能和速度的損耗,這是需要平衡的。不過(guò)個(gè)人覺(jué)得性能的瓶頸不在框架,應(yīng)該強(qiáng)調(diào)你的業(yè)務(wù)設(shè)計(jì)。
  • 簡(jiǎn)單的,學(xué)習(xí)成本要低,PHP 本身很容易使用和學(xué)習(xí),大部分框架使用了很多設(shè)計(jì)模式,但是對(duì)于大部分人來(lái)說(shuō)強(qiáng)調(diào)的是快速編碼,假如不是特別理解這個(gè)框架的設(shè)計(jì),那么使用這個(gè)框架的成本就太高了,另外由于框架在 PHP 上做了過(guò)多的封裝,那你面對(duì)的也許就不是 PHP 語(yǔ)言了,所以建議選用相對(duì)簡(jiǎn)單的框架,除非你有特殊需求。
  • 良好的框架學(xué)習(xí)和使用文檔,社區(qū)對(duì)這個(gè)框架的支持程度,對(duì)我來(lái)說(shuō)就是中文文檔有沒(méi)有。
  • 限制不要太多
    很多框架會(huì)限制你很多編碼方式,就是說(shuō)不提倡使用原生的 PHP 功能,比如我學(xué)習(xí)Javascript的時(shí)候先學(xué)習(xí)的是JQuery,到最后分不清什么是 Javascript 語(yǔ)言了。一個(gè)框架應(yīng)該是靈活的,限制太多會(huì)導(dǎo)致使用成本變高。
  • 可擴(kuò)展
    一個(gè)框架應(yīng)該是自由的,你可以使用這個(gè)框架最精華的部分,其他的部分(比如一些特定任務(wù)的類庫(kù))應(yīng)該是可選的,同時(shí)這個(gè)框架還容易引入第三方優(yōu)秀的庫(kù)。

那為什么選擇 Codeigniter

Codeigniter 給人初始的感覺(jué)太老了,其實(shí)這是一種誤區(qū),它支持大部分的 PHP 版本,雖然沒(méi)有什么高級(jí)特性,但足夠用了。

只要簡(jiǎn)單了解其 MVC 設(shè)計(jì),包括常規(guī)的幾個(gè)主題(路由,數(shù)據(jù)庫(kù),日志等)就基本上可以開(kāi)發(fā)了,我花了半天的時(shí)間基本上就學(xué)會(huì)使用了。

Codeigniter 的文檔也不錯(cuò),看起來(lái)絲毫不費(fèi)力。

Codeigniter 安裝也很簡(jiǎn)單,將包拷貝下來(lái)放到虛擬主機(jī)上就能運(yùn)行,想想 Laravel 的安裝(不適合初學(xué)者)。

另外使用 Codeigniter 沒(méi)有太多的約束,要是覺(jué)得某個(gè)功能不好用(吐槽其日志類庫(kù),將框架運(yùn)行的信息和應(yīng)用的信息混合在一塊,等同雞肋),可以隨意使用第三方庫(kù)。

其實(shí)最重要的還是簡(jiǎn)單,不管是使用還是學(xué)習(xí)。

假如你是一個(gè)初學(xué)者,為了讓學(xué)習(xí) PHP 過(guò)程更輕松可以選擇它, 假如要快速開(kāi)發(fā)可以選擇它,假如要研究框架也可以選擇它。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,745評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,043評(píng)論 4 61
  • 人們常說(shuō):婚姻是愛(ài)情的墳?zāi)埂6疫€沒(méi)有這樣的一個(gè)經(jīng)歷,我不知道這個(gè)墳?zāi)故鞘裁礃幼樱乙膊恢廊藗冊(cè)诨楹髸?huì)都有什么樣...
    矯情的小石頭閱讀 409評(píng)論 0 3
  • 橫江獨(dú)木妝,涇渭話凄涼。 詭道今無(wú)忌,通途古有殤。 遠(yuǎn)謀脫利索,短策墮名韁。 好事三千六,其多不在堂。 (平水.下...
    周延龍閱讀 278評(píng)論 1 2
  • 慈鯛魚大類 品種繁多啊
    老葉我不在請(qǐng)你一直單身閱讀 163評(píng)論 0 1

友情鏈接更多精彩內(nèi)容