13161216443

您所在位置: 首頁> 學習課程> PHP語言變得沒那么好,還有必要再用嗎?

PHP語言變得沒那么好,還有必要再用嗎?

發布百知教育 來源:學習課程 2019-09-28

PHP在軟件開發市場上,較之前幾年,似乎有點下降。還有一些開發人員對PHP持有不滿意態度。某種程度上,這是正確的看法。在過去的幾年中,PHP經歷了一次大規模的重構,它是不是將錯誤的設計徹底分開了呢?


我承認,PHP的確糟糕。我尚佯做不知的寫了好多年PHP,我必須接受現今所有對PHP不友好的言論??墒沁@樣做對嗎?


多數開發者對PHP語言的普遍態度是:不良的語言設計。這種言論對一個資深PHP開發者感到很尷尬,甚至對一顆工匠之心造成了困擾,曾經這個世界上最好的Web開發語言,現在是如此的破,比Perl還“破”(并沒有對Perl語言有任何不敬之意)。


但是我想起最開始學編程時,包括自己與身邊并不是計算機專業的人稱贊,有大夫還有攝影師,學液壓的工程師,他們壓根沒學過神馬編譯原理,數據庫,操作系統等專業課,但卻因為PHP而瘋狂的喜歡上了網站開發。


就在幾年前,在Quora上有一篇文章被廣泛傳播。這篇文章的作者是Quora的創始人Adam D'Angelo。此文章的大意是PHP設計不當,部署不好,開發者使用情況很是糟糕。


不妨回顧一下PHP剛出現的時候,它開始并沒有像現在這樣被大規模應用。由于它的易用性,很多人在各個領域都在用它來開發網站或單個應用。后來互聯網發展越來越大,行業發生了轉變,人們的需求也變了。PHP好像沒咋變,還顯得有點遲滯,這可能是PHP社區的原因,比如函數命名的的不一致,比如mysql_*之類的函數,還存在一些安全性問題。我用了很多年的PHP,它還有不少陷阱,這讓我也感到比較痛苦。


吐槽了半天PHP,是不是感覺很爽。


但是,如今已經快2020年,上面提到的那篇文章卻寫于2012年,如今人們仍然在熱傳和引用這篇文章,人們的視野還是像當年那樣的燥動和盲目。因此我想說兩句,待俺擦亮自己鈦金眼鏡下的土狗眼,來總結一下PHP這兩年發生的變化。


PHP在近年來發生了重大的更新。比如Facebook和PHP7從HipHop到HHVM的發展,不論是PHP官方還是應用開發者都意識到了問題的重要,一直到現在你看到本文,社區和開發者一直在解決和改善這門語言。在2019年的今天,如果你仍然使用mysql_*來開發,或者把鍋扔給PHP,那么你需要重新學習了。


如同地域黑一般,編程語言的鄙視鏈不知道啥時候出現的,不知道為什么會存在這些東西?


是的,只要有東西一旦受歡迎,火了,就會引起一些人討厭甚至謾罵。人們討厭Java,說太重,配置繁瑣,Oracle要收錢;人們討厭C++,難學丑陋又低級等...


現在AI和人工智能火了,Python開始被人們所追捧,有人就拿它和PHP進行比較。我對Python沒有成見,Python是一個很棒的語言,與PHP一樣是腳本語言,但它發明的目的就是現在流行的AI/機器學習/數據科學嗎?


還有一個讓我無法對Python完全接受的原因:Python運行太慢,尤其是用在網站開發上。如此說來,如果你埋怨PHP代碼丑陋,我就會說Python運行緩慢。這是因為,用Python需要使用框架開發。最開始時,我只是想用Python開發一個簡單的程序來跑,而Python社區推薦我用Django或Flask。我不喜歡臃腫的框架,另外在Python編程中,要小心空白或空格的坑。


別外,Python的面向對象也很有趣,它使用下劃線來訪問對象修飾符。有人能夠理解這個聲明,但我更喜歡顯式的聲明。Python確實是一個很棒的語言,它還有一個很棒的開發者社區,但仍然有人不喜歡它。就像我們自己覺得在任何地方都受到歡迎一樣,這應該是一場美麗的誤會,一定會有人不喜歡你。


另外,我個人也不是很喜歡JavaScript這個東西,當然這純屬個人觀點。一些JavaScript帥哥努力游說我,Node.js現在可以充當PHP的角色,Node.js會比PHP、Java以及Python等后端語言更優秀,安全而且速度更快,我應該馬上去學習Node.js,這些朋友還說是PHP發明了SQL注入,我便無語了。


回到PHP的話題。你現在手里還有PHP4甚至更早的遺留代碼嗎?送大家一份新的編碼清單:


1、使用OOP編程


你仍然可以編寫面向過程的程序,但社區已朝著面向對象的方法發展。它完全匹配新模型,可以很好地構造代碼。使用面向對象,自動隱含幾種簡潔的編碼實踐,例如SOLID和DRY。


OOP可以讓代碼庫有干凈的結構,并使各部分的模塊之間的分離更好。如果你堅持喜歡編寫意大利面條代碼,沒有人攔著,你會讓PHP最糟糕,然后給自己起個壞名字吧。任何編程語言都可以做到這一點。不只是PHP。


2、使用嚴格的數據類型


在編程時,要使用嚴格的數據類型。類似于:

declare(strict_types=1)

靜態類型可以幫助數據保持一致和安全。PHP是一種動態類型的語言,有時需要排除該特性,使用嚴格的類型以及更安全的路徑,可以使程序在運行時避免怪異和不可預測的錯誤。


3、命名空間


到了PHP5.6之后,頁面中include語句不再常見。使用命名空間來“import”導入需要“use”的模塊。這是對原始PHP進行抽象的一種方法,即封裝了include邏輯。

剛一開始,使用“\”作為命名空間分隔符是有點怪異,但是我們會慢慢習慣它。不用再使用那些require或include語句,命名空間將代碼放到正確的位置。


這讓我又想到了以下一些要點。


4、Artists


現在打算啟動一個PHP項目,可以使用Composer,這是一個包依賴關系管理工具,可讓定義擴展包的依賴關系,應用程序和測試入口點,在需要時從Packagist中央存儲庫中加載依賴關系。Composer會生成一個Auto Loader自動加載器,這是我們在整個項目唯一對include的調用。


5、拋棄mysql_*


mysql_* 已經存在很長一段時間,如今所有函數都已被棄用,并已經在PHP 7中已將其永久刪除。如果你仍然抱怨mysql_*函數怎么不好,你該升級你的PHP版本。到目前為止,處理數據庫的最佳方法是PDO與prepare聯用的方式。這是一個通用API,可與大量數據庫很好地配合使用。

我喜歡PDO的地方是純凈,相對現代化的設計,面向對象且一致性好。如果你剛剛開始一個PHP項目,請立即轉為使用PDO。


另外,不要使用和創建DB封裝程序,比如DBConnection extends PDO。如果需要通過PDO進行某種抽象,請使用Data Mapper和ORM Doctrine,不要用Active Record變體。


6、分散你的擔憂


之所以今天的PHP社區出現問題,有部分原因是官方社區的新開發人員將其搞得一團糟,有時感覺比JavaScript社區更糟(我感到很抱歉)。由于PHP易于學習和入門,所以新手經常寫一些hacky硬編碼并部署到生產環境中。而其他編程語言沒有這個能力,這是因為:

a)學習曲線更陡峭;

b)事先有著嚴格的設計策略;

c) 嚴格的部署配置標準;


我們通過分散焦點來解決這類問題。我記得初學時,曾經曾經將函數的一部分代碼直接復制粘貼到其他文件中,從而完成相同的功能,只是稍稍有一些修改。我知道為什么初學者會這樣干。


首先,請先給功能做減法。將代碼分解成小模塊,讓它們獨立和單一地做一件事。比如有一個User類,它不允許有創建消息,加密消息并將消息發送給其他用戶等功能。


結合來自互聯網的開源庫,這些庫發布前已經經過很好測試,能夠很好地解決問題,而且做得更好。開發者應該更專注于業務邏輯,使用現有方法,不要產生緊密耦合。


7、使用PSR


最后,嚴格遵循編碼約定,并在PHP-FIG上閱讀。PHP標準建議(PSR)會讓你和團隊有著一致的代碼庫,從而方便理解與擴展,且編寫與項目兼容的代碼,在集成過程中的標準檢查可以阻止爛代碼,不會讓你在寫了一些代碼后的3個月內大罵自己:)


此建議通常適用于每種語言。遵循編碼約定并努力編寫更好的代碼。當然,沒有人能阻止你成為“代碼叛逆者”,還沒有發明阻止程序員寫某種代碼的技術。


8、PHP在中國


PHP在2008年到2012年是一個巔峰,有Discuz、PHPWind等現今仍流行的產品,尤其是當時Facebook等明星級公司使用PHP做為開發語言,國內的門戶也使用了PHP做為全部或前端語言。后來是由于移動端開發的興起,使Web開發不再像以前可以前后通吃,這包括后端所有語言。


PHP與各種語言的互通,各種硬件的互通,仍然是最方便的語言。PHP在國內的發展,比國外要更加普及,有新的PHP運行環境polar PHP,還有協程客戶端Swoole,還有PHP的內核開發者鳥哥,PHP的幾大框架Laraval、YII、ThinkPHP以及CodeIgniter,有兩個是中國人開發的,即YII和ThinkPHP,這些都在讓PHP7開發的產品性能和效能達到更佳。


小結


僅管PHP語言很爛。但其它語言也是如此,我們只是用它們做為工具來完成任務。我不只一次看到,即便是用靜態語言,二把刀的人用Java輸出的也是糟糕的代碼。


有一句話叫代碼如詩,讓自己和團隊來寫看起來像詩歌的程序,而不是丑陋的像打架一樣的代碼。


如此一來,你可以放心的用PHP啟動下一個項目了,你和同事們會做更好的判斷嗎?同事可能太自由隨便了,嗯,也許他們的代碼還在編譯中?,F在就去做,語言是你的工具,寫好產品的每行代碼是你的工作。


那么問題來了,當有人再說“PHP是最好的語言”時,該怎樣說?


以下是社區中的一些網友評論:


人類的愛:


很好的總結。我一直在用PHP,我們的API在PHP Slim 3框架上運行。使用了PSR、自動加載、Composer,這些對PHP社區做了重大改進。曾經,我最大的抱怨是PHP函數(尤其是字符串)參數順序不一致。


我喜歡PHP是開放的。給桔子剝皮不只有一種方法,這就是為什么我個人討厭自以為是的語言和框架的原因。


我喜歡可以在自選的任意Web服務器上運行它,比如在Apache的模塊或Nginx的FPM上運行。


語法種子:


人們一直在引用2012年的文章!!7年的發展不該煥然一新嗎?


CS老兵:


不錯的文章。我都看完了,說實話,我當年寫了不少非常爛的php代碼,但是后來通過用Laravel框架學習OOP幫我改變了很多陋習。


DAS:


正確的結論。參數不一致是PHP的主要問題,真的需要解決。這有時真的很煩人。


但是得再說一次,用任何一種語言記住每個參數順序都不太容易。擅用手冊或者一個不錯的IDE/編輯器來幫我補充是個好想法,比如PHPStorm就做得挺好。


作者:老夏


PHP培訓:http://www.akpsimsu.com/php2019

上一篇:20年經驗分享:程序員為什么不要一味迷戀“管理”?

下一篇:應屆生去公司找個Java程序員的職位需要什么技能?

相關推薦

www.akpsimsu.com

有位老師想和您聊一聊

關閉

立即申請