這就是現代php該有的樣子(二)

pilishen發表於2018-04-13

本文來自medium----原文連結; 歡迎作客我們的php&Laravel學習群:109256050

你需要開始使用測試

這是我每天對自己說的話。像很多人一樣,我不會像TDD所建議的那樣測試我的程式碼。我現在在使用測試,在過去的半年裡一直這樣做,前面還有很長的路要走。

我是在處理複雜的遺留專案時決定學習測試。程式碼是如此的脆弱和僵硬,以至於一旦我們新增一些程式碼就會破壞它。新的特徵?實現和破壞某事!修復錯誤?新建另一個。

這是一個大問題,並讓我開始嘗試測試。

第一個工具是PHPUnit。如官方網站所述

PHPUnit是PHP的面向程式設計師的測試框架。

這是單元測試框架xUnit架構例項。

所以,PHPUnit是幫助您建立您的專案的測試框架,單元測試。它提供了幾個函式來測試程式碼的結果,並生成與這些測試結果相同的良好輸出。

自從我開始思考測試、閱讀、和於人交談測試,我發現了另一個偉大的工具,它是對以前那些單元的測試工作的補充,它就是Behat,這是一個BDD的PHP框架。

BDD(行為驅動開發)是一個來自TDD(測試驅動開發)的開發過程。這些縮寫詞現在並不重要,重要的是你可以使用更自然的語言來說明你的測試,這種語言對於非技術人員也可以理解它。

這種語言被稱為Gherkin,是用來描述被測試的預期的行為。使用Gherkin看起來像這樣

這就是現代php該有的樣子(二)

在這些描述背後,每當描述於phpDoc中的指定的方法有正則模式匹配相應的php程式碼就會被呼叫,通過SDK、應用程式或Web系統,這些程式碼實現了這些步驟,模擬真實的使用者將做的

使用Behat工作是如此順利。在一切正確配置之後,您開始編寫測試一個特性的所有可能場景。一旦你執行behat,它給你所有你應該新增到您的PHP環境類的方法模版以便實施場景的每一步

之後,您開始編寫每一步的實際程式碼,並繼續重複這個迴圈。

  • 實現一個步驟的php程式碼
  • 執行測試
  • 如果執行正常,繼續實現下一步的php程式碼
  • 如果有異常,修復它

在經歷一個半小時的配置和閱讀文件後,你可以開始使用Behat,到最後你看到的都是php程式碼然後你就已經知道了怎麼編寫它

持續整合

持續整合(CI)是一個過程——一種做某事的方法,而這一點對於我們的軟體工程師來說,就是創造軟體。

簡單地說,它是將小程式碼塊(也許每天幾次)不斷的整合到程式碼庫中的行為。程式碼將被測試並且沒有異常。CI幫助您自動化應用程式的構建、測試和部署。

通過幾次點選,你可以通過Travis CI整合你的GitHub專案,每次推送到倉庫後會執行你以寫好的PHPUnit和Behat測試,這些測試告訴你最後實現的特點是否準備好,是否要合併。除此之外,您還可以使用Travis CI將程式碼部署到生產環境和暫存。

通過一個被良好規範的程式實現一個良好的工作流程是極好的,Travis CI可以幫助你做這項工作。遵循這個好的開始,發現對軟體開發過程的思考是多麼有趣,而不僅僅是程式碼本身。

遵循PSR-1 和 PSR-2

如果你以前不知道PSR是什麼,那麼現在你應該去了解了。實際上PSR代表PHP Standard Recommendation(PHP規範推薦),PHP-FIG建議使用它們。PHP—FIG是一個成員來自最大的PHP專案、框架和CMS系統的一個組織,它致力於對語言的未來、生態系統的思考和討論應被遵循的PHP規範

很長一段時間以來PHP都沒有編碼風格。我沒有那麼老,但每次我看到別人的專案或庫時,它們的風格都不同。有時把括號放在一個位置,有時把它放在下一行,用不同的方法來處理長長的一行程式碼,還有其他風格和喜好的組合。真是一團糟。

PHP—FIG做許多其他的工作,但提出一個統一的程式碼,他們說:“讓我們停止操心程式碼風格,讓我們每個人都遵循同一個標準,並開始思考創造偉大的軟體”。現在,每當你檢視某人的程式碼時,你只會操心它是如何工作的,而不是研究格式、結構。

在文章的最後,一共有9種被接受的PSRs為解決常見問題的推薦解決方案。但如果你不知道這些標準的話,以PSR-1和psr-2作為起點。

這些標準提出了現代PHP編碼風格。請務必在開始使用之前閱讀它們。不要認為在編寫程式碼時你會記住所有的程式碼,這是一個過程,但為了讓你確定你使用的規範,有一些工具可以幫助你完成它。 PHP CodeSniffer是一種工具,你可以在Packagist上找到它,使用Composer安裝它。我不認為這個庫名稱是最好的選擇,因為它包含兩種不同的工具,分別是phpcbf PHPCs。

Phpcs程式碼嗅探器,它會掃描你的整個程式碼,查詢與配置的編碼標準不符的程式碼部分。

您可以通過PHPCs使用多種編碼標準你甚至可以建立你自己的標準。在程式碼掃描結束,PHPCs列出不遵循標準的程式碼片段。真是太好用了。

現在,如何修改所有的錯誤的程式碼片段?你可以開啟所有的檔案,更改程式碼,執行PHPCs直到看到錯誤不顯示出來,並重覆上述過程。這樣會很無聊。

為了解決這一問題,PHPcodesniffer的一個稱為phpcbf的工具發揮作用了,或成為PHP程式碼美化工具。它在不破壞你的程式碼的前提下盡力修復所有的錯誤使之符合相同的程式碼規範。

試著養成習慣,在push你的程式碼到你的倉庫之前使用phpcs和phpcbf檢查程式碼,這將保證你所寫的程式碼都符合規範,一旦有人喜歡你的專案並想貢獻時,他們閱讀起程式碼來毫無問題。

框架

我不想花太多的時間討論框架,下面有一個好的框架,各有優缺點,就我而言,我不喜歡使用這些封裝來所有東西的大框架。我喜歡需要什麼就使用什麼。

如果你需要一個HTTP 客戶端,比如Guzzle。如果你需要你個模版引擎比如Twig。如果你需要一個路由器。找到適合你的組建並使用他們,將他們組合起來構建你自己的應用。

Symfony為這個概念做了很多,你可以使用這整個框架作為一個專案,也可以像上面所述使用任何你需要的組建。

然而,每當我需要使用框架來寫應用,我通常會選擇微型框架。它們真的很小,近提供最基礎的元件,並且十分的容易定製。

我的微型框架選擇是Slimframework,我認為大家都應該去試試它。

順便提一下,對於剛學程式設計的人來說,我真的建議在採用框架和使用前,你應該試著建立一個你自己的框架。這將讓你對這整個的工作機制有個整體的瞭解。並讓你在以後採用大型框架時更容易理解。

現代PHP工具

讓我們以一組連結表來結束這篇文章,對於我來說,這些元件和工具和庫就代表來現代PHP的偉大思想:

  • Slimframework:一個既好又酷的微型框架
  • Symfony : 一個擁有偉大和可複用元件的大一點的框架
  • Guzzle : 一個簡單和好用HTTP客戶端
  • Behat : 一個行為驅動開發框架
  • PHPCS/CBF : 程式碼檢查和美化
  • Faker : 虛擬資料生成器
  • Psysh:充滿極好的功能的即時開發控制檯
  • Composer : 依賴管理和其他的一些有用的特色
  • Packagist : 第三方庫倉庫
  • Twig : 模版引擎

我知道這個標題確實很自負,在這裡我真正想說的是PHP正在進步,它的生態系統同樣也在進步(可能更快)。

相關文章