国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

看吧,這就是現(xiàn)代化 PHP 該有的樣子

Tangpj / 2332人閱讀

摘要:這大概是我沒有及早使用,或多數(shù)開發(fā)者流連現(xiàn)狀造成的。它就是,一個(gè)的框架。行為驅(qū)動(dòng)開發(fā)是來自測(cè)試驅(qū)動(dòng)開發(fā)的開發(fā)過程。簡(jiǎn)單的說,它就是經(jīng)常可能一天幾次將小塊代碼整合進(jìn)基礎(chǔ)代碼當(dāng)中的行為。

這是一篇社區(qū)協(xié)同翻譯的文章,已完成翻譯,更多信息請(qǐng)點(diǎn)擊?協(xié)同翻譯介紹?。

文章的標(biāo)題真是自命不凡,不是嗎?是的,雖然我們使用 PHP 工作很多年,但是我們能夠說出哪些是最佳實(shí)踐和最好的工具嗎?我不能,但是我將要去這么做。

我看到開發(fā)者們使用 PHP 工作的方式正在發(fā)生真正的變化,不僅因?yàn)?PHP 新的版本和自身逐步的完善,讓 PHP 語言發(fā)生了巨大變化,變得更加成熟和健壯,更重要的是整個(gè)生態(tài)系統(tǒng)也在不斷地改變。

為了使代碼更優(yōu)雅和更易于理解,人們創(chuàng)造了新的工具、庫、框架和文章,定義了新的設(shè)計(jì)模式。一些人還在思考如何讓工作(和開發(fā)者的生活)變得更具生產(chǎn)力,更簡(jiǎn)潔和更有趣。

我不是一個(gè)新趨勢(shì)的早期追隨者,實(shí)際上,我只會(huì)在一個(gè)新工具有了社區(qū)和我認(rèn)為它能改善我的工作后才會(huì)去使用它。我經(jīng)常做的僅僅是嘗試采用最佳實(shí)踐來寫代碼。

所以,我花了一段時(shí)間以后才開始使用 Composer 和 PHPUnit 等工具。大約一年以前,我才向這些閃亮的新事物敞開了心扉。

先是 PSR,然后是 Composer,PHPUnit,Travis-ci 等其他幾個(gè)庫和令人驚奇的工具。我甚至已經(jīng)開始使用 IDE 了(Vim FTW,但是配置了 XDebug 的 PHPStorm 才是一個(gè)明智的工作環(huán)境)!

什么是現(xiàn)代化?

作者:?Karen Roe?(Flickr) [CC BY 2.0 (http://creativecommons.org/li...)]

網(wǎng)上有大量的文章說 PHP 多么可怕,從事 PHP 編碼工作會(huì)讓你的生活多么糟糕,語言是多么丑陋以及你能想到的任何其他東西!

如果你打算使用遺留代碼,可能你的生活不會(huì)太好,但是如果你有機(jī)會(huì)參與一個(gè)新的項(xiàng)目并且能夠使用所有的新工具,那么你將會(huì)看到我要講的這個(gè)新的 PHP 。

我每天都會(huì)用 PHP 處理一些問題,但是人們無法關(guān)注語言、社區(qū)以及生態(tài)系統(tǒng)所發(fā)生的變化 。雖然還有很長的路要走,但是 PHP 領(lǐng)域的事情正在變得越來越成熟。

我開始為我工作的公司創(chuàng)建一個(gè)內(nèi)部 API 的 SDK,例如一個(gè)寵物項(xiàng)目,并且決定遵循最佳實(shí)踐。大部分事件我已經(jīng)在做了,但是我在做某些事情的時(shí)候做了一些改變。這些改變以及我去年學(xué)到的知識(shí)是本文的主題,我稱之為現(xiàn)代化 PHP 。

我們從工作流程開始

如我所說,我剛剛使用 IDE 沒有多久,但是自從用上了 IDE ,我就喜歡上了。PHPStorm 是軟件中的頂級(jí)杰作。它將會(huì)是我的第一個(gè)也是此后唯一一個(gè) IDE 。它是我的首次嘗試,它好到我沒有必要再去嘗試其他的IDE。

集成的 XDebug 簡(jiǎn)直完美,還有 PHP 命名空間解析、 composer 、git 、代碼自動(dòng)補(bǔ)全、代碼生成、代碼重構(gòu)。讓我說三天三夜都說不完。

我不認(rèn)為你必須使用 IDE ,實(shí)際上,這完全是個(gè)人觀點(diǎn)。你需要使用諸如此類的符合你的需求的,例如:Vim 、Atom 、Emacs 、Bracket 、NetBeans 、 PHPStorm 、Eclipse ,等等。很重要的兩點(diǎn)是生產(chǎn)力與人體工學(xué)。你的 IDE 或文本編輯器必須是協(xié)助你工作的,而不是拖累你。

然而,對(duì)于我來說,很重要的一點(diǎn)是對(duì)于調(diào)試功能的集成。寫一個(gè)大型項(xiàng)目(其實(shí)小項(xiàng)目也一樣)你需要一個(gè)很好的調(diào)試工具。讓我們忘掉那些var_dumpprint_r。你需要在代碼運(yùn)行時(shí)設(shè)置變量的值、分析堆棧、設(shè)置斷點(diǎn)。 這些才是至關(guān)重要的,它們使得開發(fā)和重構(gòu)更加容易。

我甚至不知道是否還有其他的選擇,XDebug 擁有你所需要的一切。你現(xiàn)在有時(shí)間嗎?如果你還沒有做過這些事情,請(qǐng)花一點(diǎn)時(shí)間安裝 XDebug 并把它整合到你的 IDE 里吧。從現(xiàn)在開始使用正確的工具來調(diào)試你的代碼。

另一個(gè)我想讓你引起注意的工具是 Github。可以寫一大篇文章來介紹 Git 和 Github 有多棒,以及你為什么必須開始使用版本控制來管理你的代碼,但此處我想為你展示另一個(gè)原因。

這里的重點(diǎn)就是 integration (GitHub Integration,譯者注)。

Github 中還整合了其他幾個(gè)工具,并且你應(yīng)該開始使用它們。在持續(xù)化集成過程中,這些工具可以為你生成數(shù)據(jù),跑測(cè)試,跑任務(wù),在你的工作流中為你做各種各樣的事情。Integration 是你開始使用 Github 的一個(gè)很好的理由,其他的事情都可以暫時(shí)靠邊站。

依賴管理

現(xiàn)代 PHP 生態(tài)的另一點(diǎn)就是依賴管理,Composer 也由此而生。

Composer 已經(jīng)5歲了,但大規(guī)模應(yīng)用還是近兩年的事。這大概是我沒有及早使用,或多數(shù) PHP 開發(fā)者流連現(xiàn)狀造成的。

它是 Packagist 的終端,而 Packagist 是 PHP 包的倉庫,由 PHP 庫、項(xiàng)目以及工具組成,源碼保存在 Github (或 BitBucket 等)。

本文談及的所有第三方庫,都可以輕松地添加到你的項(xiàng)目中。

$ composer require package_vendor/package_name

要是不知道第三方庫的名稱,可以使用 search?查找。

$ composer search package_name

Composer 是管理依賴的不二之選,但絕不僅于此。不妨花點(diǎn)時(shí)間安裝 Composer,閱讀其?文檔。

處理得當(dāng)?shù)拿钚薪缑?/b>

我真的愿意嘗試快速使用 CLI 界面的想法。對(duì)我而言,最偉大的 REPL 工具是?IPython。該工具可自動(dòng)完成你的代碼,讓你輕松定義函數(shù),悠閑地訪問文檔,還有其他的多個(gè)驚艷的特性。對(duì)我們不利的是,該工具用于 Python 而非 PHP。

PHP 世界里有種稱之為 “互動(dòng)模式” 的東西,可以通過終端工具訪問,只需鍵入以下代碼:

$ php -a
Interactive mode enabled
php >

本場(chǎng)景中即處于互動(dòng)模式,能著手一些東西的測(cè)試。該模式很管用,不過太不直觀了。我還是賣力地嘗試了幾次,由于我知道 IPython 的本事,因此令我根本不會(huì)繼續(xù)用這個(gè)模式。

幸運(yùn)的是,存在一款全新酷炫的 CLI (命令行界面) 工具,名叫 Psysh。 Psysh 是一款令人驚艷的工具,充滿了引人注目的特性,可以全局安裝,也可使用 composer 按項(xiàng)目安裝。

對(duì)我而言最棒的 Psysh 特性就是內(nèi)嵌文檔功能。直接查詢一個(gè)PHP函數(shù)的文檔而無須跑到 Php.net 網(wǎng)站上,簡(jiǎn)直棒極了。 缺點(diǎn)是你在享用所有功能前還必須完成幾件事。

該工具安裝完畢后,為正確運(yùn)行就要輸入以下命令(我這里用的是 Debian ,未必適合所有人) :

$ apt-get install php7.1-sqlite3
$ mkdir /usr/local/share/psysh
$ wget  -o /usr/local/share/psysh/php_manual.sqlite

第一條命令并不是強(qiáng)制性的并且如果你已經(jīng)安裝了 Sqlite 你可以跳過這一步。第二個(gè)命令創(chuàng)建目錄來存儲(chǔ)文檔而第三條命令下載并將文檔保存到先前創(chuàng)建的目錄中。記住,所有這些命令都必須以 root 身份運(yùn)行。

現(xiàn)在你有了這些:

psysh 指令文檔說明的截圖,顯示關(guān)于 json_decode 的信息。

點(diǎn)擊此鏈接前往 Psysh?了解更多關(guān)于這個(gè)炫酷的工具。

你應(yīng)該開始測(cè)試

這是我每天對(duì)自己說的咒語。像很多人一樣,我沒有按照 TDD 的建議去測(cè)試代碼。我現(xiàn)在已經(jīng)養(yǎng)成測(cè)試習(xí)慣,并且已經(jīng)持續(xù)了半年,然而還有很長的路要走。

當(dāng)我面對(duì)一個(gè)復(fù)雜的遺留項(xiàng)目時(shí),我決定學(xué)習(xí)測(cè)試。那個(gè)項(xiàng)目代碼如此奇葩,以至于任何時(shí)間我添加一些代碼都會(huì)出問題。 用新特性? 實(shí)現(xiàn)功能和制造問題!修改一個(gè)bug? 還是創(chuàng)建一個(gè)新的吧。

那是一個(gè)大問題,我在另一篇,并且是我開始嘗試使用測(cè)試。

我想推薦的第一個(gè)工具是?PHPUnit。 正如官網(wǎng)展示的:

PHPUnit 是一個(gè)面向程序員的PHP測(cè)試框架
PHPUnit 是一個(gè)實(shí)例 xUnit 架構(gòu)的單元測(cè)試框架

所以,PHPUnit 是一個(gè)為你的項(xiàng)目生成統(tǒng)一測(cè)試的框架,它會(huì)提供一些函數(shù)去測(cè)試你的代碼并且有漂亮的結(jié)果輸出。

自從我開始考慮測(cè)試,閱讀和與人交談它,我發(fā)現(xiàn)另一個(gè)很棒的工具,它會(huì)補(bǔ)充你在這些統(tǒng)一測(cè)試中的工作。它就是 Behat,一個(gè) PHP 的 BDD 框架。

BDD(行為驅(qū)動(dòng)開發(fā))是來自 TDD(測(cè)試驅(qū)動(dòng)開發(fā))的開發(fā)過程。這些縮略詞現(xiàn)在不重要,重要的是您可以使用更自然的語言來指定您的測(cè)試,這是非技術(shù)人員可以理解的語言。

這個(gè)語言被稱為 Gherkin,用于描述正在測(cè)試的預(yù)期行為,使用 Gherkin的測(cè)試描述,如下所示:

在這些行后面有 PHP 代碼,只有在該方法的 PhpDoc 中指定的行和正則表達(dá)式之間存在匹配,就會(huì)調(diào)用該代碼。該代碼使用你的 SDK、應(yīng)用程序或者 web 系統(tǒng)實(shí)現(xiàn)這些步驟以及真正的用戶將執(zhí)行的操作

Behat 的工作流程十分流暢。在一切正確配置之后,你就可以開始編寫測(cè)試功能的所有可能方案。當(dāng)你首次運(yùn)行 Behat 時(shí),它會(huì)提供你所有那些你應(yīng)該添加到 PHP Context 類中的方法模板以便實(shí)現(xiàn)場(chǎng)景中的每一個(gè)步驟。

在那之后,你就可以為每一個(gè)步驟編寫實(shí)際代碼并重復(fù)此循環(huán)。

為每一個(gè)步驟編寫 PHP 代碼

運(yùn)行測(cè)試

如果一切正常,為其它步驟編寫 PHP 代碼

如果有地方出了問題,修復(fù)它

在配置和閱讀文檔半小時(shí)后,你可以準(zhǔn)備使用 Behat,到最后你會(huì)發(fā)現(xiàn)全都是 PHP 代碼并且已經(jīng)發(fā)現(xiàn)你已經(jīng)知道如果使用它編程。

持續(xù)集成

持續(xù)集成( CI ) 是一個(gè)過程,它提供一個(gè)為軟件工程師創(chuàng)建軟件的一個(gè)方法。

簡(jiǎn)單的說,它就是經(jīng)常(可能一天幾次)將小塊代碼整合進(jìn)基礎(chǔ)代碼當(dāng)中的行為。代碼已經(jīng)測(cè)試過且不會(huì)出現(xiàn)突發(fā)情況。CI 幫我我們自動(dòng)構(gòu)建,測(cè)試和部署到我們的應(yīng)用中。

只要幾次點(diǎn)擊,就可以將你的 Github 的項(xiàng)目集成到 Travis CI 中之后你每次將代碼推送到倉庫,它會(huì)運(yùn)行你創(chuàng)建的 PHPUnit 和 Behat 文件,并告訴你最近的功能是否已經(jīng)準(zhǔn)備,或沒有,或?qū)⒁缓喜ⅰ3酥猓憧梢允褂?Travis CI 將你的代碼部署到生產(chǎn)環(huán)境中運(yùn)行。

通過一個(gè)明確定義的工作流程來完成工作流程是非常好的,Travis CI 可以幫助我們完成這個(gè)工作。閱讀這篇 ?Getting started ,了解軟件開發(fā)過程是如此有趣而并不僅僅是代碼本身。

遵循 PSR-1 和?PSR-2

如果你還聽說過 PSR ,那你應(yīng)該馬上去了解。實(shí)際上,PSR 是 PHP Standard Recommendations 的簡(jiǎn)寫,是由?PHP-FIG?(PHP Framework Interop Group) 推出的。PHP-FIG 是由一些大的 PHP 項(xiàng)目、框架、CMS的成員組成的組織,旨在思考這門語言的未來、生態(tài),討論語言中應(yīng)遵循的標(biāo)準(zhǔn)。

很長一段時(shí)間以來,PHP 沒有編碼風(fēng)格之說。我的年紀(jì)還不是很大,但是每一次我看別人的項(xiàng)目或庫的時(shí)候,它們都使用不同的編碼風(fēng)格。有時(shí)候花括號(hào)在這個(gè)位置,有時(shí)候它又在下一行,一個(gè)長行的處理方式也會(huì)有好幾種,各種不同的編碼風(fēng)格和喜好混合在一起,一團(tuán)糟。

PHP-FIG 做了很多的工作,通過推出統(tǒng)一的編碼規(guī)范,他們好像在說:“不要再糾結(jié)編碼風(fēng)格了,讓我們所有人都遵循一個(gè)標(biāo)準(zhǔn),然后重心都集中于好軟件的制作上吧”。現(xiàn)在,無論什么時(shí)候你想閱讀某人的代碼時(shí),你只需要關(guān)心代碼是如何運(yùn)行的就可以了,而不用再指責(zé)他的代碼風(fēng)格和結(jié)構(gòu)了。

截止至此篇文章發(fā)布,已經(jīng)有9個(gè)達(dá)成共識(shí)的 PSR 標(biāo)準(zhǔn)推出,為一般問題提供了通用解決方案。如果你還不知道這些標(biāo)準(zhǔn),就從 PSR-1?和?PSR-2 開始吧。

這些標(biāo)準(zhǔn)提出了現(xiàn)代 PHP 的編碼風(fēng)格,確保你已經(jīng)讀過并已經(jīng)開始使用它們了。別想著你能在寫代碼的時(shí)候全部想著它們,這是一個(gè)漫長的過程,但是你應(yīng)該知道,有一些工具可以輔助你使用和記住它們。

PHP CodeSniffer?就是一個(gè)你能在 Packagist 上找到并使用 Composer 安裝的工具。我認(rèn)為這個(gè)庫的名字并不是很理想,因?yàn)樗鼘?shí)際上包含了兩個(gè)工具, phpcs 和 phpcbf。

Phpcs 用于代碼風(fēng)格檢測(cè),它會(huì)全面掃描你的代碼,找出那些不符合已經(jīng)配置好的編碼規(guī)范的部分。

你可以使用 phpcs 內(nèi)置的很多種編碼規(guī)范,也可以自定義編碼規(guī)范。在掃描的最后,它會(huì)為你列出不符合編碼規(guī)范的代碼片段,非常棒。

那么,怎么才能把錯(cuò)誤改正呢?你可以打開每一個(gè)文件,改代碼,再運(yùn)行 phpcs ,看看是否還有錯(cuò)誤,然后重復(fù)這個(gè)過程。非常無聊。

為了解決這個(gè)問題,PHP CodeSniffer 提供了另一個(gè)工具,叫做 phpcbf 或 PHP Code Beautifier。在同一套編碼規(guī)范設(shè)置下,運(yùn)行 phpcbf,它就會(huì)在不破壞你的代碼的前提下,盡最大努力為你改正所有的錯(cuò)誤。

試著建立在代碼提交之前運(yùn)行 phpcs 和 phpcbf 的習(xí)慣,這將會(huì)保證你所有的代碼都符合編碼規(guī)范,如果有人喜歡你的工具(或工程)并且想貢獻(xiàn)代碼,他們?cè)陂喿x你的代碼時(shí)將不會(huì)有任何阻礙。

框架

我不打算花費(fèi)太多的時(shí)間來討論框架,現(xiàn)在已經(jīng)有一些不錯(cuò)的框架了,或流行或小眾。個(gè)人而言,更傾向于不使用那些內(nèi)置所有功能的重型框架,我的想法是,你僅僅選擇你需要的那個(gè)就好了。

如果你需要一個(gè) HTTP 客戶端,你可以使用 Guzzle。如果你需要使用模板引擎,那么你可以使用 Twig。如果你需要一個(gè)路由,那么找一個(gè)能夠滿足你需求的組件并使用它就好了。將這些組件組裝起來,打造你自己的應(yīng)用吧。

Symfony?框架沿著這個(gè)方向已經(jīng)做了很偉大的工作。你可以為你的項(xiàng)目使用整個(gè)框架,或者僅僅選擇并使用你想要使用的一部分。就是那么的簡(jiǎn)單。

然而,無論何時(shí)我想使用框架來完成一個(gè)應(yīng)用時(shí),我總會(huì)從為被稱為微框架的那些框架中選擇一個(gè)。它們真的很輕,僅僅提供基本的功能,易于定制化,并且可以方便的讓它來適應(yīng)你的項(xiàng)目架構(gòu)。

我選擇的微框架是?Slimframework?,我覺得你應(yīng)該讀一讀它。對(duì)于處理小型項(xiàng)目,它真的很簡(jiǎn)單,但是對(duì)于較大的項(xiàng)目,使用它就有些復(fù)雜了。

順便向正準(zhǔn)備編程的同學(xué)們說一下,我真心覺得,在你選擇一個(gè)框架并打算一直使用它之前,你應(yīng)該動(dòng)手創(chuàng)造一個(gè)屬于你自己的框架。這會(huì)讓你理解框架的運(yùn)行機(jī)制,并且能更快地適應(yīng)大型框架。

現(xiàn)代PHP工具包

讓我們用一系列工具包來結(jié)束文章。 對(duì)我來說,這些組件、工具和庫描繪了現(xiàn)代PHP的樣子:

Slimframework: 一個(gè)很好、很酷的小型框架

Symfony:一個(gè)由很多優(yōu)秀、可重用組件構(gòu)成的重量級(jí)框架

Guzzle::可以很簡(jiǎn)單容易發(fā)起HTTP請(qǐng)求的客戶端

PHPUnit: 一個(gè)測(cè)試框架

Behat: 行為驅(qū)動(dòng)的測(cè)試框架

PHPCS/CBF:代碼規(guī)范、美化工具

Faker:生成測(cè)試數(shù)據(jù)的庫

Psysh: 充滿令人驚訝的交互式控制臺(tái)

Composer:依賴管理,且有著其他很多有用的特性

Packagist:PHP包倉庫

Twig: 模板引擎

我知道,文章的標(biāo)題真的有些狂妄。其實(shí)我想要說的是PHP正在進(jìn)化,PHP生態(tài)圈也在以同樣(也許更快)的速度進(jìn)步。

討論請(qǐng)前往:https://laravel-china.org/top...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/28407.html

相關(guān)文章

  • 就是現(xiàn)代php有的樣子(二)

    摘要:所以,是幫助您創(chuàng)建您的項(xiàng)目的測(cè)試框架,單元測(cè)試。行為驅(qū)動(dòng)開發(fā)是一個(gè)來自測(cè)試驅(qū)動(dòng)開發(fā)的開發(fā)過程。這種語言被稱為,是用來描述被測(cè)試的預(yù)期的行為。代碼將被測(cè)試并且沒有異常。這些標(biāo)準(zhǔn)提出了現(xiàn)代編碼風(fēng)格。 本文來自medium----原文鏈接; 歡迎作客我們的php&Laravel學(xué)習(xí)群:109256050 你需要開始使用測(cè)試 這是我每天對(duì)自己說的話。像很多人一樣,我不會(huì)像TDD所建議的那樣測(cè)試...

    fevin 評(píng)論0 收藏0
  • 宣布 Parcel:一個(gè)快速,零配置的 Web 應(yīng)用打包工具 ?

    摘要:宣布一個(gè)快速,零配置的應(yīng)用打包工具原文譯者今天,我非常高興地宣布,一個(gè)快速,零配置的應(yīng)用程序打包工具,我對(duì)于該工具的工作已經(jīng)持續(xù)了幾個(gè)月。性能我被激發(fā)建立一個(gè)新的打包工具的第一個(gè)原因是性能。 ? 宣布 Parcel:一個(gè)快速,零配置的 Web 應(yīng)用打包工具 ? 原文:? Announcing Parcel: A blazing fast, zero configuration web...

    learn_shifeng 評(píng)論0 收藏0
  • 最適合入門的Laravel初級(jí)教程(四)

    摘要:最適合入門的初級(jí)教程四路由可以分發(fā)請(qǐng)求路由中還可以引入頁面我們可以在中搞定一切了但是如果把業(yè)務(wù)邏輯都寫入到路由中那路由將龐大的難以維護(hù)于是控制器就有了很明顯的存在價(jià)值把業(yè)務(wù)邏輯寫在控制器中路由只負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求到指定的控制器即可那我們開始創(chuàng)建控 最適合入門的Laravel初級(jí)教程(四) 路由可以分發(fā)請(qǐng)求; 路由中還可以引入 html 頁面;我們可以在 route/web.php 中搞定一切...

    gplane 評(píng)論0 收藏0
  • 后端語言選型淺談

    摘要:再往后來,也就是這種以事件循環(huán)常駐內(nèi)存為特點(diǎn)的后端平臺(tái),姑且能算是第四代后端平臺(tái)。 前不久回答了一個(gè)關(guān)于后端語言選型的問題,寫的回答也讓筆者有了很多感觸,因此在這里談?wù)撓伦约簩?duì)后端語言選型的心得體會(huì),姑且算是拋磚引玉,希望大家能分享各自的心得。 后端語言發(fā)展歷史 Web 后端語言的興起是從靜態(tài)網(wǎng)頁向動(dòng)態(tài)網(wǎng)頁的發(fā)展所產(chǎn)生的,最早的動(dòng)態(tài)頁面技術(shù)就是 CGI 技術(shù),將客戶端的輸入交給 CGI...

    xcc3641 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<