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