當前位置:
首頁 > 最新 > 現代PHP是個什麼樣?

現代PHP是個什麼樣?

作者:FarazUsmani,來源:Wikipedia

本文標題寫的有點大,你覺得呢,我覺得是有點大。 雖然我用PHP已經若干年,我怎麼能說這門語言的最佳實踐與工具呢?我不能說,但我會繼續用。

我看到開發者使用PHP開展工作的方式發生了本質的變化 ,不僅在語言上發生了巨變,新版本與新功能改進越來越成熟強大,而且整個生態系統也正在發生變化。

PHP社區正在創建新的工具,庫、框架與文檔,其定義的新模式使代碼更加優雅,容易理解。很多人們都在想辦法讓工作更有效、乾淨和更有趣。

我得承認,我不是喜歡應用新趨勢的人。實際上,當我採用新的工具時,且認為它會改善我的工作,然後確定有社區在背後支撐。接下我就會嘗試按最佳實踐編寫我的代碼。

正是因為如此,我花了一些時間開始使用Composer和PHPUnit。大概在一年前,或多或少地,循序漸進地,我開始為那些閃光的新事物敞開了心扉。

我開始喜歡新的工具產生,我暫時放下VIM,嘗試使用新的IDE,我發現與XDebug集成的PHPStorm的工作流和體驗很好。

一些庫和好用的工具,PSR排在第一,然後是Composer,PHPUnit,Travis-ci乖讓我驚嘆不已。

什麼是現代語言?

作者:KarenRoe,From Flickr

網上有很多PHP相關的文章,但很多寫的都非常糟糕。如果你不得不使用PHP開發,用網上粘貼的代碼,醜陋的語法和老舊的代碼,是無法做出想要的產品,也會讓我們的生活變得也糟糕。

如果您仍然在遺留的代碼上做開發,也許你的生活並不一定很美好。如果你在一個新項目上工作,並能夠應用到所有的新工具,您將看到一個嶄新的PHP。

PHP社區每天會反饋一些BUG,大多數是細節與我們的項目關係並不太大。但是我們不能不關注語言、社區和生態系統發生的變化,而且PHP社區也越來越成熟。在中國,你可以多關注鳥哥的博客。

我正在現在的公司開發一個內部API的SDK,就像做一個寵物項目一樣,嚴格遵循技術最佳實踐。雖然以前的日子裡我也一直堅持在做,但是在某些事情我也需要做一些改變和調整。而這些變化就是我這段時間學到的內容,也就是本篇文章的主題,我稱之為現代化的PHP。

從工作流程開始

TRIO FABRIKKER - 來源:https://nos.twnsnd.co

前面和大家說過,我是個IDE新手,但一見鍾情。 PHPStorm是一款偉大的軟體,它是我第一次用也是唯一用的IDE,我甚至不用再嘗試其它的IDE軟體。PHPStorm與XDebug的集成非常完美,支持PHP命名空間解析,artisan集成,Git集成,自動完成,代碼生成與重構等特性。

當然,您不一定要使用IDE,這完全由個人喜好決定,可以使用任何稱手的工具適合自己。比如還可以選擇如VIM,Atom,Emacs,Bracket,Netbeans,Eclipse,UltraEdit,NotePad++等編輯 器。這裡我想要說的,選編輯器的兩個重點是生產力和人體工程學,IDE或文本編輯器要在這兩處能幫助我們。

不過,對我來說,最重要的是調試工具集成。編寫大小項目代碼,都要擁有一個完善的調試器,它能讓我們忘記var_dump和print_r。我們可以在運行時跟蹤這些變數,分析堆棧狀態,設置代碼斷點。這些讓我們開發和重構更容易。

我不知道還有沒有其它選擇,XDebug能夠讓我們擁有這一切。你安裝它了嗎?如果還沒開始做,請花一點時間來設置XDebug並把它集成到IDE或編輯器,使用正確的工作來調試代碼。

另外需要提起您注意的工具是GitHub。我們的社區也有很多Git和GitHub相關的不少文章,還有幫助我們如何把代碼放置在版本控制系統下。但是,我想告訴您還有另外一個緣由。

這個就是整合。我們還有一些工具應該與GitHub整合。這些工具可以生成各種數據指標,在運行測試、持續集成過程中為我們提供幫助。

依賴管理

圖為InstituoPasteur,拍攝於葡萄牙里斯本。

現代的PHP生態系統另一點是依賴管理,Composer是負責這個工作的好工具。

Composer已經有5歲了,在我看來,這幾年才開始大規模採用。也許是我不是最早的使用者,也可能PHP開發者不願意改變。

這個工具為代碼包提供了一個前端,它由一個PHP庫、項目和工具組成的PHP包項目庫,源代碼存儲在Github或BitBucket等其它地方。

在這篇文章中我們討論的所有庫,也可能是您喜愛的項目,可以通過簡單的方式添加到項目中。

# composer requirepackage_vendor/package_name

如果不知道軟體包的作者,可以使用 search 來查找軟體包並正確安裝它。

# composer search package_name

用Composer完成這些工作,管理軟體包依賴,它是一個非常好的工具。Composer還有很多有用的功能,值得我們花時間在安裝完之好好閱讀它的文檔。

正確的命令行界面

我真的很喜歡使用CLI界面來快速嘗試創意。對我來說,最大的REPL工具就是IPython,它能幫我自動完成代碼,讓我輕鬆定義函數,快捷訪問文檔和其它一些令人驚喜的功能。對PHP開發者來說,這個工具是Python的工作,而不是給PHP的。

在PHP的世界裡,我們有一個叫「交互模式」的東西,可以在終端訪問,只需要輸入:

# php –a

Interactive shell

這時候,我們就處在CLI交互模式中了,可以進行測試,但是PHP提供的這個工具有點不直觀。我試了幾次略覺不爽。我知道IPython能做挺多事,於是我暫時放棄使用它。

幸運的是,在PHP世界裡,有一個很酷的新CLI界面,名字叫Psysh。Psysh是一個神奇的工具,有著和IPython一樣有趣的功能,可以用Composer安裝為全局或單個項目使用。

對我來講,最好的Psysh功能是內置文檔,想查一個PHP函數,不必去php.net,但是也需要做一些事情才能完全發揮作用。

安裝完成後,輸入以下命令即可工作。

apt-get install php7.1-sqlite3

mkdir /usr/local/share/psysh

wgethttp://psysh.org/manual/en/php_manual.sqlite-o /usr/local/share/psysh/php_manual.sqlite

如果您已經安裝了Sqlite,第一行命令不是必須的,可以跳過。第二個命令用來創建psysh的工作目錄,用來存儲文檔。這些都需要用root身份執行。

現在,您可以這麼做:

以上界面為psysh的文檔界面,顯示的是關於json_encode函數的使用方法

您應該開始測試

這是我每天都要對自己說的口頭禪。像很多人一樣,我不像TDD所說的那樣複雜的測試。

我下一步要處理一個複雜的遺留項目,中間也進行一些測試,發現代碼是如此脆弱和僵化,我想添加一些功能代碼,會把原有的代碼功能破壞。

推薦使用PHPUnit,正如官方網站所說的:

PHPUnit是面向程序員的面向PHP的測試框架。

它是單元測試框架的xUnit體系結構的一個實例。

PHPUnit是一個幫助你的項目在創建測試的框架,做整體的測試。它提供了一系列函數來測試代碼的執行結果,並輸入測試結果。

自從我開始考慮測試,閱讀和與人溝通。我發現了另一個很棒的工具,它叫Behat,補充了我在統一測試中的其它工作,這是PHP領域中的BDD框架。

BDD(Behavior-Driven Development)是一個來自TDD(測試驅動開發)的開發過程。這些縮略詞現在並不重要,重要的是可以使用更自然的語言來開始測試,這些並不是技術人員可以理解的語言。

這種語言被稱為「Gherkin(小黃瓜)」,用來描述正測試的行為預期。使用小黃瓜的測試描述語言如下所示:

在這些行的後面有PHP代碼,只要在PHPDoc中指定的行與正則表達式存在匹配,就會調用它。這段代碼實現了這些步驟,以前當真正的用戶調用你的SDK時會是什麼現象。

Behat的工作流程非常流暢。當配置完成後,可以寫所有可能的場景來測試一個功能。第一次運行Behat時,它會為您提供所有應添加到PHP上下文類中的方法模板,以實現場景中的每個步驟。

之後,開始寫每步的實際代碼,並不斷重複這個循環。

1 實現PHP代碼的第一步

2 運行測試

3 如果運行順利,再不衫不履 一段PHP代碼

4 如果有問題,修復

經過半小時的配置和閱讀文檔,你準備使用Behat,你會發現它包含了全部的PHP代碼。

持續集成

持續集成(CI)是一個過程,這也是一種做事情的方式。對開發者來說,這個事情就是創建軟體。

用簡單的英語來說,就是將小塊代碼不斷地合併到代碼庫中。代碼已經過測試,並不會破壞任何東西。CI幫助我們的應用程序自動化的構建、測試和部署。

只需點擊幾下,就可以把GitHub項目與Travis CI集成在一起,並且每次推送到存儲庫,然後運行PHPUnit和Behat創建的測試,告訴我們已經實現最後一個功能,是否已準備好,是否合併。除此之外,可以使用Travis CI來把代碼部署到生產機和測試機。

Travis CI可以幫我們完成一個工作流程,良好的開發過程。遵循這個良好的習慣,你會發現軟體開發的過程多麼有趣,而不僅僅是代碼本身。

PSR-1與PSR-2

如果你不知道PSR是什麼,你該去做個功課。實際上,PSR代表著PHP標準建議,由PHP-FIG(PHP Framework Interop Group)提出,PHP-FIG是由最大的PHP項目,框架和CMS組成的聯盟,由他們來考慮語言、生態系統和未來要遵循的標準。

很長一段時間,PHP沒有編碼規範。我不是那麼守舊,每次都看到某個人的項目或庫用了不同風格的庫。有時候括弧和條件放在一起,有的被放在下一行,有的函數採用下劃線,有的用了駝峰風格。如此等等的風絡,幾乎成了一個爛攤子。

PHP-FIG做了很多工作,也提出一個統一的代碼風格。他們這樣和開發者說:「不有再擔心代碼風格,讓每個開發者都遵循同一個標準,一起創建優秀的軟體」。這樣,當我們看到每個人的代碼,只需思考功能的完成和完善,而不用再指責格式和結構。

在本文正在寫作之時,已經有9個PSR已接受的問題並提供了共同的解決方案。但是,如果你對這些標準一無所知,我們從PSR-1和PSR-2開始。

這些標準共同組成了現代的PHP編碼風格。請確保在開始使用它們之前仔細閱讀。不要以為在編碼時你會記得所有這些,這需要一段過程,但是可以確定的是,有一些工具可以幫助到我們。

PHP CodeSniffer是個可以在Packageist上找得到的工具,可以用Composer來安裝。我不認為代碼倉庫的名是最好的選擇,是因為它包括兩個不同的工具,分別是phpcs和phpcbf。

Phpcs是個代碼嗅探器,它會掃描整個代碼,尋找不符合編碼標準的部分。我們可以使用phpcs幾個編碼標準,還可以創建自己的風格。當代碼掃描結果後,phpcs會向我們展示一些不符合標準的代碼段列表。

比如我們想讓代碼的錯誤信息。需要打開每個文件,修改代碼,然後需要再次運行phpcs,查看錯誤是否顯示,然後重該過程。這會比較無聊。

為了解決問題,PHP CodeSniffer提供了另外一個叫phpcbf的工具,這個工具另一名字叫PHP Code Beautifier。運行phpcbf,遵循相同的規則,並且為你修改相關的內容,能夠在不破壞代碼的情況做到最好。

框架

我不會發太多時間來討論框架。有好的也有不好的,每個框架都有優點缺點。就個而言,我寧願不用那些大框架。適合自己的需求夠用就好。

比如你需要一個HTTP客戶端,可以用Guzzle。如果需要模板引擎,就用Twig。如果需要一個路由,找到一個適合自己的需求,並且用好它。把這些組件粘合在一起就能創建好一個好的應用程序。

Symfony在這個概念做得很好。我們可以將整個框架用於一個項目,也可像引用庫一樣,隨心所欲的調用它,就是這麼容易。

然而,當我需要一個框架來編寫應用程序時,我首先選擇所謂的「微框架」。它們非常小巧,只提供基本的架構,易於定製,更容易讓它們隨著您的項目結構。

我選擇的微框架是SlimFramework,我建議您可以閱讀它的源代碼,用它來做小型項目很簡單,對於大型項目會複雜一些。

順便說一句,對於那些剛剛剛開始編程的朋友來說,我認為,在用框架之前,您應該用自己的庫來完成項目,嘗試創建自己的框架。這會讓你對整個PHP機制有所了解,且可以大大減少代碼的開發。

現代PHP工具箱

下面我們用鏈接來完成本篇文章。對我自己來說,組件、工具和庫代表了很多現代PHP的功能:

Slimframework 一個非常不錯和微框架

Symfony – 一個大型框架,有不少強大的可重用組件,類似的框架如Laravel是在它的基礎上發展起來的。

Guzzle – 一個簡單易的HTTP客戶端

PHPUnit – 一個用於整體測試的開發框架。Facebook也在用。

Behat – 事件驅動的開發框架

PHPCS/CBF – 代碼嗅探器和代碼美化器

Faker – 數據生成器

Psysh – 一個開發者命令控制台(CLI),有著強大的功能

Composer – 依賴管理和其它有用的功能

Packagist – 包存儲庫

Twig – 模板引擎

本文的標題起的有點大,或許還有點自以為是:) 但我真正想給大家展示的是,PHP正在發展,生態系統也在以同樣的速度(也許更快)地發展。

作者:Felipe Lope

標題:This is what modern PHP looks like

編譯:21CTO社區 – Raymond

原文:https://medium.freecodecamp.org/this-is-what-modern-php-looks-like-769192a1320


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 21CTO 的精彩文章:

Solr與Elasticsearch 之簡明比較

TAG:21CTO |