現在寫 PHP,你應該知道這些

來源:互聯網
上載者:User

首先你應該是在用 PHP 5.3 以上的版本,如果 PHP 版本在這之下,是時候該升級了。我建議如果有條件,最好使用最新的版本。

你應該看過 PHP The Right Way,這篇文章包含了很多內容,而且還能再擴充開。大部分的名詞和概念你都需要瞭解。

1. PSR

The 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 只是做一些規範代碼風格等無關痛癢的事情,但其實遠不止此。

PSR 的一系列標準文檔由 php-fig (PHP Framework Interop Group)起草和投票決議,投票成員中有一些主流架構和擴充的作者,包括 Laravel、Symfony、Yii等等。

按照其官網的說法,這個組織的目的並不是告訴你你應該怎麼做,只是一些主流的架構之間相互協商和約定。但是我相信這些架構和擴充中總會有你用到的。

PSR 目前通過的共有 6 份文檔:

  • 0:自動載入(主要是針對 PHP 5.3 以前沒有命名空間的版本)

  • 1:編碼規範

  • 2:編碼風格推薦

  • 3:Log 結果

  • 4:自動載入更細(在出現命名空間後有很大的改變)

  • 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 (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,既美觀也起到了按需載入、消極式載入的作用。

3. php-cs-fixer

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 項目中。

可能有人覺得糾結代碼風格的問題其實沒有特別大的必要。要說好處我也說不上來,如果你覺得編程不僅僅是一份工作,那這就跟你收拾房間一樣,邋遢的房間不影響你吃飯睡覺,但乾淨的看起來更舒服。如果要和別人合作,那這件事情就更重要了。

4. PsySH

A runtime developer console, interactive debugger and REPL for PHP.

PsySH 類似 Python 的 IDLE 的一個 PHP 的互動運行環境。這個是我在 Laravel 中發現的,Laravel 5 的artisan tinker 的功能是通過它來實現的。Laravel 4 中用的是另外一個項目:boris。

這個主要是在平時測試一些 php 的簡單的函數和特性的時候可以方便使用。遇到一些不確定的事情、比如empty 的使用等,可以用它來做些測試。

5. 一些架構和組件

架構

我比較喜歡的是 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

ORM 亦或 Active Record 我覺得還是需要的。也許有人認為 PHP 就是一個模板引擎、就應該手寫 SQL 。不要被這些話所困擾。

CodeIgniter 中 Active Record 的實現方式很輕巧,但對於 CI 本身的體量來說,已經是很好用的了。

Laravel 實現的 Eloquent 我是很喜歡的,也可以整合到別的項目中去。Symfony 2 使用的是 Doctrine ,這個項目也值得關注。Yii 2 也有自己的一套實現方式。

模板引擎

模板引擎需要做三件事情:

  1. 變數值的輸出(echo),

  2. 條件判斷和迴圈(if … else、for、foreach、while)

  3. 引入或繼承自其他檔案

Laravel 實現的 Blade 是一個比較輕量好用的模板引擎。不過目前並不是很好能夠引入到其他架構中。十一的時候閑來無事試圖將其引入到 Yii 2 中,現在還只是簡單的實現,我希望後面能將 Blade 的解析部分單獨抽取出來做一個輕量的實現。在 Github 上搜一下發現也有人在做同樣的事情。

Yii 2 似乎更推薦就用原生的 PHP 去寫,不過也提供了支援 Smarty 和 Twig 的擴充。Symfony 2 則採用了 Twig。Twig 和 Symfony 以及上文提到的 php-cs-fixer 都是 SensioLabs 的作品。

Smarty 是一個古老而頑強的模板引擎。說實話我並不是太喜歡,其文法過於複雜,變數賦值這些事情都有自己的一套做法。現在的版本中更是使用 Lexer 的方式來解析檔案,感覺像是用 PHP 實現了另外一種語言。項目裡面還有一些太長的Regex、太複雜的實現,我覺得這是一件很危險很容易出錯的事情。



相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。