你應該看過 php The Right Way ,這篇文章包含了很多內容,而且還能再擴展開。大部分的名詞和概念你都需要了解。 1.PSR groupn. 在之前的文章中以及跟同事交流的過程中我多次提到過PSR(PHPPH Standard Recommendation)。很多人以為 PSR 只是做一些規範程式碼風格等無關痛癢的事情,但其實遠不止此。 PSR 的一系列標準文件由php-fig (PHP Framework Interop Group)起草和投票決議,投票成員中有一些主流框架和擴展的作者,包括Laravel、Symfony、 Yii等等。 依照其官網的說法,這個組織的目的並不是告訴你你應該怎麼做,只是一些主流的框架之間相互協商和約定。但是我相信這些框架和擴充總會有你用到的。 PSR 目前通過的共有6 份文件: 0:自動載入(主要是針對PHP 5.3 之前沒有命名空間的版本 1:編碼規範 2:編碼風格推薦 2:編碼風格建議 4:自動載入更細(在出現命名空間後有很大的改變) 7:HTTP 介面7:HTTP 介面 目前在起草(Draft)中的還有PSR-5(PHPDoc Standard)、PSR-6(Cache)等。 5 和 6 沒有出現在以上的清單中,是因為還沒有投票通過。 我相信隨著標準的不斷更新,你會發現研究這些約定對你也是很有裨益的,雖然未必什麼都要遵守。 Nobody in the group wants to tell you, as a programmer, how to build your application. 2.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 for them. 🎜>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,即美觀也起到了按需載入、延遲載入的作用。 3.php-cs-fixer The PHP Coding Standards Fixer tool fix> The PHP Coding Standards Fixer tool fixix> The PHP Coding Standards Fixer tool fixixo>The PHP Coding Standards Fixer tool fixixes most issue in wixs 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 專案中。 可能有人覺得糾結程式碼風格的問題其實沒有特別大的必要。要說好處我也說不上來,如果你覺得程式設計不只是一份工作,那這就跟你收拾房間一樣,邋遢的房間不影響你吃飯睡覺,但乾淨的看起來更舒服。如果要和別人合作,那這件事情就更重要了。 4.PsySH A runtime devel操作🎜> PsySH 類似Python 的IDLE 的一個PHP 的互動運作環境。這是我在 Laravel 中發現的,Laravel 5 的 artisan tinker 的功能是透過它來實現的。 Laravel 4 中用的是另一個項目: boris 。 這個主要是在平時測試一些 php 的簡單的函數和特性的時候可以方便使用。遇到一些不確定的事情、像是 empty 的使用等,可以用它來做測試。 5.一些框架和組件 框架 框架我喜歡的〜」是比較目前公司在用的是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 ORM 亦或 Active Record 我覺得還是需要的。也許有人認為 PHP 就是一個模板引擎、就該手寫 SQL 。不要被這些話所困擾。 CodeIgniter 中 Active Record 的實作方式很輕巧,但對於 CI 本身的體量來說,已經是很好用的了。 Laravel 實現的 Eloquent 我是很喜歡的,也可以整合到別的專案中去。 Symfony 2 使用的是 Doctrine ,這個專案也值得關注。 Yii 2 也有自己的一套實現方式。 模板引擎 模板引擎需要做三件事: 模板引擎需要做三件事: 模板引擎需要做三件事:2、條件判斷與循環(if ... else、for、foreach、while) 33 、引入或繼承自其他文件 Laravel 實現的Blade 是比較輕量好用的模板引擎。不過目前並不是很好能夠引入其他框架。十一的時候閒來無事試圖將其引入到 Yii 2 中,現在還只是簡單的實現,我希望後面能將 Blade 的解析部分單獨抽取出來做一個輕量級的實現。在 Github 上搜尋發現也有人在做同樣的事情。 Yii 2 似乎更建議就用原生的 PHP 去寫,不過也提供了支援 Smarty 和 Twig 的擴充。 Symfony 2 則採用了 Twig。 Twig 和 Symfony 以及上文提到的 php-cd-fixer 都是 SensioLabs 的作品。 Smarty 是一個古老而頑強的模板引擎。說實話我並不是太喜歡,其文法過於複雜,變數賦值這些事情都有自己的一套做法。現在的版本更是使用 Lexer 的方式來解析文件,感覺像是用 PHP 實作了另一種語言。專案裡面還有一些太長的正規表示式、太複雜的實現,我覺得這是一件很危險很容易出錯的事情。更多相關PHP資料http://www.kokojia.com/list/219.html |