首先你應該是在用 PHP 5.3 以上的版本,若是 PHP 版本在這之下,是時候該升級了。我建議若是有條件,最好使用最新的版本。php
你應該看過 PHP The Right Way,這篇文章包含了不少內容,並且還能再擴展開。大部分的名詞和概念你都須要瞭解。html
The idea behind the group is for project representatives to talk about the commonalities between our projects and find ways we can work together.node
在以前的文章中以及跟同事交流的過程當中我屢次提到過 PSR(PHP Standard Recommendation)。不少人覺得 PSR 只是作一些規範代碼風格等無關痛癢的事情,但其實遠不止此。git
PSR 的一系列標準文檔由 php-fig (PHP Framework Interop Group)起草和投票決議,投票成員中有一些主流框架和擴展的做者,包括 Laravel、Symfony、Yii等等。github
按照其官網的說法,這個組織的目的並非告訴你你應該怎麼作,只是一些主流的框架之間相互協商和約定。可是我相信這些框架和擴展中總會有你用到的。正則表達式
PSR 目前經過的共有 6 份文檔:npm
目前在起草(Draft)中的還有 PSR-5(PHPDoc Standard)、PSR-6(Cache)等。5 和 6 沒有出如今以上的列表中,是由於尚未投票經過。編程
我相信隨着標準的不斷更新,你會發現研究這些約定對你也是頗有裨益的,雖然未必什麼都要遵照。app
Nobody in the group wants to tell you, as a programmer, how to build your application.composer
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 都不一樣,它不只僅是用於安裝擴展,更重要的是定義了一種現代 PHP 框架的實現和擴展管理的方法。相似 node.js 的 npm、Python 的 pip 但又比以上作的更多。
composer 的核心是實現擴展的標準安裝和類的自動加載。經過 packagist.org 這個平臺,無數的擴展組件能夠被很方便的引入,目前比較知名的 PHP 擴展均可以經過 composer 安裝了。而調用僅僅只須要加載一個 autoload.php 的文件便可。
composer 是經過 spl_autoload_register 方法註冊一個自動加載方法實現擴展類和文件的加載的,固然這中間 composer 也作了一個優化。
咱們都知道 PHP 引入文件要經過 include 和 require 實現,這其實寫起來並很差看。 PHP 5.3 提供了命名空間,這原本和文件引入也不相干。可是 composer 實現了 PSR-4(在老版本的 PHP 上是 PSR-0),使用 use 時經過調用 spl_autoload_register 實現的方法在調用時加載所須要的類,在寫法上相似 Python 的 import,即美觀也起到了按需加載、延遲加載的做用。
The 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 的規範格式化你的代碼,還有一些可選的編碼風格是 Symfony 的規範。
這個其實原本並無那麼值得一說,只是最近在幾個開源框架中都看到了 .php_cs 的文件,一時好奇,深究下去才發現了這個項目。
項目地址:https://github.com/FriendsOfPHP/PHP-CS-Fixer
具體的使用和配置方法在其項目主頁上都有介紹。這個組織的名字也頗有趣:FriendsOfPHP。主要的成員大概是來自 Symfony 項目中。
可能有人以爲糾結代碼風格的問題其實沒有特別大的必要。要說好處我也說不上來,若是你以爲編程不只僅是一份工做,那這就跟你收拾房間同樣,邋遢的房間不影響你吃飯睡覺,但乾淨的看起來更舒服。若是要和別人合做,那這件事情就更重要了。
A runtime developer console, interactive debugger and REPL for PHP.
PsySH 相似 Python 的 IDLE 的一個 PHP 的交互運行環境。這個是我在 Laravel 中發現的,Laravel 5 的 artisan tinker 的功能是經過它來實現的。Laravel 4 中用的是另一個項目:boris。
這個主要是在平時測試一些 php 的簡單的函數和特性的時候能夠方便使用。遇到一些不肯定的事情、好比 empty 的使用等,能夠用它來作些測試。
我比較喜歡的是 Laravel,目前公司在用的是 Yii2,我關注的有 Symfony 以及 Phalcon (C語言實現)。用什麼不用什麼,主要是喜愛,有時候也由不得本身選擇,但研究一下,多一分了解也何嘗不可。
提到 Laravel 不少人都會立馬想到 Ruby on Rails。我想模仿或者抄襲這都不是主要的目的,主要的目的是提供給開發者一個更好的工具。Laravel 好在它有一個不同的路由控制(不帶 Action 後綴或前綴的),有一個好用的 ORM (Eloquent),好用的模板引擎 (Blade) 亦或有一個顏值比較高的文檔(社區看到的話)等等。
強大有時候也會被人詬病龐大,但這在於你須要瞭解本身項目的中長期規劃,項目如今的大小以及將來的大小及承載。
Larval 的核心實現是一個容器(Container)以及 PHP 的反射類(ReflectionClass)(Yii 2 也是同樣)。要理解這些,多看文章和文檔的同時,也能夠看看源碼。
Symfony 2 提供了不少組件。http-kernel 和 http-foundation 在 Laravel 中也有被繼承過來直接使用。它是值得了解和學習的。
CodeIgniter 是一個小巧而強大的框架。雖然 CI 並無使用 Composer 組件的方式進行開發,但 3.0 之後的版本也加入了 Composer 的支持(這無非就是多一個 vendor 的目錄,引入 autoload.php)的文件。
ORM 亦或 Active Record 我以爲仍是須要的。也許有人認爲 PHP 就是一個模板引擎、就應該手寫 SQL 。不要被這些話所困擾。
CodeIgniter 中 Active Record 的實現方式很輕巧,但對於 CI 自己的體量來講,已是很好用的了。
Laravel 實現的 Eloquent 我是很喜歡的,也能夠集成到別的項目中去。Symfony 2 使用的是Doctrine ,這個項目也值得關注。Yii 2 也有本身的一套實現方式。
模板引擎須要作三件事情:
Laravel 實現的 Blade 是一個比較輕量好用的模板引擎。不過目前並非很好可以引入到其餘框架中。十一的時候閒來無事試圖將其引入到 Yii 2 中,如今還只是簡單的實現,我但願後面能將 Blade 的解析部分單獨抽取出來作一個輕量的實現。在 Github 上搜一下發現也有人在作一樣的事情。
Yii 2 彷佛更推薦就用原生的 PHP 去寫,不過也提供了支持 Smarty 和 Twig 的擴展。Symfony 2 則採用了 Twig。Twig 和 Symfony 以及上文提到的 php-cd-fixer 都是 SensioLabs 的做品。
Smarty 是一個古老而頑強的模板引擎。說實話我並非太喜歡,其語法過於複雜,變量賦值這些事情都有本身的一套作法。如今的版本中更是使用 Lexer 的方式來解析文件,感受像是用 PHP 實現了另一種語言。項目裏面還有一些太長的正則表達式、太複雜的實現,我以爲這是一件很危險很容易出錯的事情。