標籤:投票 int upload symfony while 測試 img 空間 idle
本文來源:http://www.zretc.com/technologyDetail/443.html
如果你進行中PHP入門學習,那麼下面這些關於PHP的入門知識你應該知道哦!
首先你應該是在用 PHP 5.3 以上的版本,如果 PHP 版本在這之下,是時候該升級了。如果有條件,最好使用最新的版本。
1.PSR
很多人以為 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 沒有出現在以上的列表中,是因為還沒有投票通過。
我相信隨著標準的不斷更新,你會發現研究這些約定對你也是很有裨益的,雖然未必什麼都要遵守。
2.Composer
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
這個工具的作用是按照 PSR-1 和 PSR-2 的標準格式化你的代碼,還有一些可選的編碼風格是 Symfony 的規範。
可能有人覺得糾結代碼風格的問題其實沒有特別大的必要。要說好處我也說不上來,如果你覺得編程不僅僅是一份工作,那這就跟你收拾房間一樣,邋遢的房間不影響你吃飯睡覺,但乾淨的看起來更舒服。如果要和別人合作,那這件事情就更重要了。
4.PsySH
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-cd-fixer 都是 SensioLabs 的作品。
Smarty 是一個古老而頑強的模板引擎,其文法過於複雜,變數賦值這些事情都有自己的一套做法。現在的版本中更是使用 Lexer 的方式來解析檔案,感覺像是用 PHP 實現了另外一種語言。項目裡面還有一些太長的Regex、太複雜的實現,這是一件很危險很容易出錯的事情。
不知道上面的知識你瞭解了沒有,如果你想瞭解更多有關PHP入門學習知識請登入中軟國際教育集團技術知識庫!
PHP入門學習:現在寫 PHP,你應該知道這些