摘要:首先你應(yīng)該是在用以上的版本,如果版本在這之下,是時候該升級了。按照其官網(wǎng)的說法,這個組織的目的并不是告訴你你應(yīng)該怎么做,只是一些主流的框架之間相互協(xié)商和約定。和沒有出現(xiàn)在以上的列表中,是因?yàn)檫€沒有投票通過。不要被這些話所困擾。
首先你應(yīng)該是在用 PHP 5.3 以上的版本,如果 PHP 版本在這之下,是時候該升級了。我建議如果有條件,最好使用最新的版本。
你應(yīng)該看過 PHP The Right Way,這篇文章包含了很多內(nèi)容,而且還能再擴(kuò)展開。大部分的名詞和概念你都需要了解。
1. PSRThe idea behind the group is for project representatives to talk about the commonalities between our projects and find ways we can work together.
在之前的文章中以及跟同事交流的過程中我多次提到過 PSR(PHP Standard Recommendation)。很多人以為 PSR 只是做一些規(guī)范代碼風(fēng)格等無關(guān)痛癢的事情,但其實(shí)遠(yuǎn)不止此。
PSR 的一系列標(biāo)準(zhǔn)文檔由 php-fig (PHP Framework Interop Group)起草和投票決議,投票成員中有一些主流框架和擴(kuò)展的作者,包括 Laravel、Symfony、Yii等等。
按照其官網(wǎng)的說法,這個組織的目的并不是告訴你你應(yīng)該怎么做,只是一些主流的框架之間相互協(xié)商和約定。但是我相信這些框架和擴(kuò)展中總會有你用到的。
PSR 目前通過的共有 6 份文檔:
0:自動加載(主要是針對 PHP 5.3 以前沒有命名空間的版本)
1:編碼規(guī)范
2:編碼風(fēng)格推薦
3:Log 結(jié)果
4:自動加載更細(xì)(在出現(xiàn)命名空間后有很大的改變)
7:HTTP 消息接口
目前在起草(Draft)中的還有 PSR-5(PHPDoc Standard)、PSR-6(Cache)等。5 和 6 沒有出現(xiàn)在以上的列表中,是因?yàn)檫€沒有投票通過。
我相信隨著標(biāo)準(zhǔn)的不斷更新,你會發(fā)現(xiàn)研究這些約定對你也是很有裨益的,雖然未必什么都要遵守。
2. ComposerNobody in the group wants to tell you, as a programmer, how to build your application.
Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.
composer 和 Pear、Pecl 都不同,它不僅僅是用于安裝擴(kuò)展,更重要的是定義了一種現(xiàn)代 PHP 框架的實(shí)現(xiàn)和擴(kuò)展管理的方法。類似 node.js 的 npm、Python 的 pip 但又比以上做的更多。
composer 的核心是實(shí)現(xiàn)擴(kuò)展的標(biāo)準(zhǔn)安裝和類的自動加載。通過 packagist.org 這個平臺,無數(shù)的擴(kuò)展組件可以被很方便的引入,目前比較知名的 PHP 擴(kuò)展都可以通過 composer 安裝了。而調(diào)用僅僅只需要加載一個 autoload.php 的文件即可。
composer 是通過 spl_autoload_register 方法注冊一個自動加載方法實(shí)現(xiàn)擴(kuò)展類和文件的加載的,當(dāng)然這中間 composer 也做了一個優(yōu)化。
我們都知道 PHP 引入文件要通過 include 和 require 實(shí)現(xiàn),這其實(shí)寫起來并不好看。 PHP 5.3 提供了命名空間,這本來和文件引入也不相干。但是 composer 實(shí)現(xiàn)了 PSR-4(在老版本的 PHP 上是 PSR-0),使用 use 時通過調(diào)用 spl_autoload_register 實(shí)現(xiàn)的方法在調(diào)用時加載所需要的類,在寫法上類似 Python 的 import,即美觀也起到了按需加載、延遲加載的作用。
3. php-cs-fixerThe PHP Coding Standards Fixer tool fixes?most?issues in your code when you want to follow the PHP coding standards as defined in the PSR-1 and PSR-2 documents.
這個工具的作用是按照 PSR-1 和 PSR-2 的規(guī)范格式化你的代碼,還有一些可選的編碼風(fēng)格是 Symfony 的規(guī)范。
這個其實(shí)本來并沒有那么值得一說,只是最近在幾個開源框架中都看到了 .php_cs 的文件,一時好奇,深究下去才發(fā)現(xiàn)了這個項(xiàng)目。
項(xiàng)目地址:https://github.com/FriendsOfPHP/PHP-CS-Fixer
具體的使用和配置方法在其項(xiàng)目主頁上都有介紹。這個組織的名字也很有趣:FriendsOfPHP。主要的成員大概是來自 Symfony 項(xiàng)目中。
可能有人覺得糾結(jié)代碼風(fēng)格的問題其實(shí)沒有特別大的必要。要說好處我也說不上來,如果你覺得編程不僅僅是一份工作,那這就跟你收拾房間一樣,邋遢的房間不影響你吃飯睡覺,但干凈的看起來更舒服。如果要和別人合作,那這件事情就更重要了。
4. PsySHA runtime developer console, interactive debugger and REPL for PHP.
PsySH 類似 Python 的 IDLE 的一個 PHP 的交互運(yùn)行環(huán)境。這個是我在 Laravel 中發(fā)現(xiàn)的,Laravel 5 的 artisan tinker 的功能是通過它來實(shí)現(xiàn)的。Laravel 4 中用的是另外一個項(xiàng)目:boris。
這個主要是在平時測試一些 php 的簡單的函數(shù)和特性的時候可以方便使用。遇到一些不確定的事情、比如 empty 的使用等,可以用它來做些測試。
5. 一些框架和組件 框架我比較喜歡的是 Laravel,目前公司在用的是 Yii2,我關(guān)注的有 Symfony 以及 Phalcon (C語言實(shí)現(xiàn))。用什么不用什么,主要是喜好,有時候也由不得自己選擇,但研究一下,多一分了解也未嘗不可。
提到 Laravel 很多人都會立馬想到 Ruby on Rails。我想模仿或者抄襲這都不是主要的目的,主要的目的是提供給開發(fā)者一個更好的工具。Laravel 好在它有一個不一樣的路由控制(不帶 Action 后綴或前綴的),有一個好用的 ORM (Eloquent),好用的模板引擎 (Blade) 亦或有一個顏值比較高的文檔(社區(qū)看到的話)等等。
強(qiáng)大有時候也會被人詬病龐大,但這在于你需要了解自己項(xiàng)目的中長期規(guī)劃,項(xiàng)目現(xiàn)在的大小以及未來的大小及承載。
Larval 的核心實(shí)現(xiàn)是一個容器(Container)以及 PHP 的反射類(ReflectionClass)(Yii 2 也是一樣)。要理解這些,多看文章和文檔的同時,也可以看看源碼。
Symfony 2 提供了很多組件。http-kernel 和 http-foundation 在 Laravel 中也有被繼承過來直接使用。它是值得了解和學(xué)習(xí)的。
CodeIgniter 是一個小巧而強(qiáng)大的框架。雖然 CI 并沒有使用 Composer 組件的方式進(jìn)行開發(fā),但 3.0 以后的版本也加入了 Composer 的支持(這無非就是多一個 vendor 的目錄,引入 autoload.php)的文件。
ORMORM 亦或 Active Record 我覺得還是需要的。也許有人認(rèn)為 PHP 就是一個模板引擎、就應(yīng)該手寫 SQL 。不要被這些話所困擾。
CodeIgniter 中 Active Record 的實(shí)現(xiàn)方式很輕巧,但對于 CI 本身的體量來說,已經(jīng)是很好用的了。
Laravel 實(shí)現(xiàn)的 Eloquent 我是很喜歡的,也可以集成到別的項(xiàng)目中去。Symfony 2 使用的是 Doctrine ,這個項(xiàng)目也值得關(guān)注。Yii 2 也有自己的一套實(shí)現(xiàn)方式。
模板引擎模板引擎需要做三件事情:
變量值的輸出(echo),
條件判斷和循環(huán)(if ... else、for、foreach、while)
引入或繼承自其他文件
Laravel 實(shí)現(xiàn)的 Blade 是一個比較輕量好用的模板引擎。不過目前并不是很好能夠引入到其他框架中。十一的時候閑來無事試圖將其引入到 Yii 2 中,現(xiàn)在還只是簡單的實(shí)現(xiàn),我希望后面能將 Blade 的解析部分多帶帶抽取出來做一個輕量的實(shí)現(xiàn)。在 Github 上搜一下發(fā)現(xiàn)也有人在做同樣的事情。
Yii 2 似乎更推薦就用原生的 PHP 去寫,不過也提供了支持 Smarty 和 Twig 的擴(kuò)展。Symfony 2 則采用了 Twig。Twig 和 Symfony 以及上文提到的 php-cs-fixer 都是 SensioLabs 的作品。
Smarty 是一個古老而頑強(qiáng)的模板引擎。說實(shí)話我并不是太喜歡,其語法過于復(fù)雜,變量賦值這些事情都有自己的一套做法?,F(xiàn)在的版本中更是使用 Lexer 的方式來解析文件,感覺像是用 PHP 實(shí)現(xiàn)了另外一種語言。項(xiàng)目里面還有一些太長的正則表達(dá)式、太復(fù)雜的實(shí)現(xiàn),我覺得這是一件很危險很容易出錯的事情。
私博地址:0x1.im
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21166.html
摘要:這大概是我沒有及早使用,或多數(shù)開發(fā)者流連現(xiàn)狀造成的。它就是,一個的框架。行為驅(qū)動開發(fā)是來自測試驅(qū)動開發(fā)的開發(fā)過程。簡單的說,它就是經(jīng)??赡芤惶鞄状螌⑿K代碼整合進(jìn)基礎(chǔ)代碼當(dāng)中的行為。 showImg(https://segmentfault.com/img/remote/1460000013769815); 這是一篇社區(qū)協(xié)同翻譯的文章,已完成翻譯,更多信息請點(diǎn)擊?協(xié)同翻譯介紹?。 文章...
摘要:所以,是幫助您創(chuàng)建您的項(xiàng)目的測試框架,單元測試。行為驅(qū)動開發(fā)是一個來自測試驅(qū)動開發(fā)的開發(fā)過程。這種語言被稱為,是用來描述被測試的預(yù)期的行為。代碼將被測試并且沒有異常。這些標(biāo)準(zhǔn)提出了現(xiàn)代編碼風(fēng)格。 本文來自medium----原文鏈接; 歡迎作客我們的php&Laravel學(xué)習(xí)群:109256050 你需要開始使用測試 這是我每天對自己說的話。像很多人一樣,我不會像TDD所建議的那樣測試...
摘要:是組件的依賴管理器,它在命令行中使用。廠商名和包名只是為了讓識別組件,而命名空間則是需要在代碼中使用組件。至此,我們的組件就發(fā)布成功了??偨Y(jié)以上就是關(guān)于安裝使用以及發(fā)布的介紹。 原文是在我自己博客中,小伙伴也可以點(diǎn)閱讀原文進(jìn)行跳轉(zhuǎn)查看,還有好聽的背景音樂噢~ showImg(https://www.cxiansheng.cn/usr/uploads/2017/11/905996380....
摘要:一個動作類,應(yīng)該有一個能夠說明其功能的名字,比如等。如果需要對我們的動作類實(shí)現(xiàn)某種適配器模式,這是非常方便的。使用單動作類的好處小巧而單一的邏輯域能夠防止代碼重復(fù)并提高代碼的可重用性,保持穩(wěn)定。易于針對各種場景進(jìn)行獨(dú)立測試。 showImg(https://segmentfault.com/img/remote/1460000015208092); 當(dāng)我們談?wù)摰綉?yīng)用程序的架構(gòu)的時候,經(jīng)...
摘要:作為一個前端人,阿里巴巴,是我最想去的國內(nèi)公司,我看重的也不是他薪水如何,完全在于他的技術(shù),這一點(diǎn)可以說明一切。阿里是個十分重視基礎(chǔ)的公司,和浮躁的前端大環(huán)境形成鮮明的對比。我不是第一次投阿里巴巴,所以心態(tài)一開始還是挺平和的。 這是去年8月份秋招的面試,五面都面完了,給大家貢獻(xiàn)干貨吧。我沒寫問題的答案,有什么問題可以留言區(qū)問我。 一面 電話面(1小時)電話面問題不多,但是十分考驗(yàn)對相關(guān)...
閱讀 1250·2021-11-23 09:51
閱讀 687·2021-11-19 09:40
閱讀 1353·2021-10-11 10:58
閱讀 2362·2021-09-30 09:47
閱讀 3739·2021-09-22 15:55
閱讀 2174·2021-09-03 10:49
閱讀 1265·2021-09-03 10:33
閱讀 707·2019-08-29 17:12