自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

新里程碑到來 開啟PHP框架的新時代

原創(chuàng)
開發(fā) 后端 前端
然而就在最近,我注意到一個新的里程碑到來了——PHP框架的新時代。5月21日我在荷蘭PHP大會上講話時談到這個問題,引發(fā)的熱烈討論也讓我感到非常有趣。本文中我想要說說我所認為的PHP目前處在什么狀態(tài),哪些地方有問題,還有眾多新出現(xiàn)的框架會怎樣改變它。

【51CTO 精選譯文】我曾在不同的系統(tǒng)和項目中埋頭度過了很多年,大部分時間都花在了PHP上。然而就在最近,我注意到一個新的里程碑到來了——PHP框架的新時代。5月21日我在荷蘭PHP大會上講話時談到這個問題,引發(fā)的熱烈討論也讓我感到非常有趣。在最近的日子里好像一切都在變化。本文中我想要說說我所認為的PHP目前處在什么狀態(tài),哪些地方有問題,還有眾多新出現(xiàn)的框架會怎樣改變它。

框架的誕生

[[30070]]

圖一 我使用PHP框架

6年前出現(xiàn)的CakePHP大概是***個PHP框架,在它以后,我們見到了大量的PHP框架。目前的數(shù)量……可能大約有一百萬了,這些框架使用著不同的MVC、DBAL和模板實現(xiàn),我喜歡它們,即使它們各有各的古怪,而且都仍然沒有得到大規(guī)模的采用。

如果你想要上網(wǎng)找找那些以框架為基礎開發(fā)的PHP開源項目,能夠找到的只有數(shù)量很少的一些,這很令人惋惜。部分原因是這些開源項目有很多在發(fā)布時甚至還沒有任何PHP框架存在,另有部分原因是想用PHP框架來開發(fā)確實需要學習相當一段時間。也就是說如果一個PHP項目如果想用框架開發(fā)就會增加不少學習難度,至少在大多數(shù)情況下。

不過框架們的出現(xiàn)已經(jīng)確實開始改變了我們開發(fā)PHP的方式。許多開發(fā)者喜歡在口頭上聲稱他們懂得面向?qū)ο?,但是當框架出來后,他們要被迫證明他們真正懂得OOP和它的工作方式。如今你要是再讓人用mysql_query可能臉上會挨上一兩拳,因為他們現(xiàn)在還需要用到mysql_real_escape_string。

框架是怎么做的呢?

沒有人真正知道PHP框架應該是什么樣子的,它們應該有什么功能。因此,人們是怎么把它們開發(fā)出來的呢?好的,他們要么是跟著其他語言(比如RoR)的現(xiàn)有框架照貓畫虎,要么是自己拍腦門。因為不存在什么經(jīng)驗可言,現(xiàn)如今大多數(shù)的框架都是傳統(tǒng)設計的,每個人都知道有問題,但卻沒法解決。

PHP開發(fā)者一貫的務實做法在這里給了很大的幫助——就像PHP作為一種語言在不停進化一樣,PHP框架也在不斷的根據(jù)反饋而改變和成長。有幾年里多數(shù)人都對已經(jīng)擁有的功能感到滿足了,但是如果你現(xiàn)在再回頭看看2007年的Zend Framework 1.0,和1.11相對比功能已經(jīng)天差地別。因此,即使在今天,框架也正在迅速的發(fā)展來滿足功能的需要。

PHP 4曾經(jīng)得到所有PHP框架的支持(令人驚訝的是現(xiàn)在一些框架仍然支持)。這導致了大量的過時代碼,特別是OOP模式。試圖支持舊版本的PHP讓新功能執(zhí)行起來過于復雜,修正錯誤也愈發(fā)艱難。而且,越來越少的開發(fā)者想要面對著這些舊代碼工作。

什么出問題了?

[[30071]]

圖二:每用一次PHP魔術(shù)函數(shù),都有一只貓要死于非命! “魔法殺戮”

首先,回到PHP魔術(shù)函數(shù)(__get、__call等等這些)盛行的年代。初看上去它們沒有什么錯,但它們實際上是非常危險的。它們讓API變得模糊不清,不能自動處理,最重要的是它們很慢。對魔術(shù)函數(shù)來說,它們的用例就是讓PHP被破解而做不想做的事情,它們有用處,但是會發(fā)生錯誤的事情。

SCOP——Static class oriented programming,面向靜態(tài)類編程,這是我發(fā)明的術(shù)語,用來描述大部分PHP代碼。靜態(tài)方法從很多方面來說都有問題,但更重要的是,如果一個類只作為靜態(tài)方法的集合,那么它就離OOP越來越遠了,它只是使用類來作為存放各種函數(shù)的容器,但是甚至有完整的框架就在做這個。

Zend Framework在很長一段時間是我最喜歡的PHP框架(現(xiàn)在對于PHP 5.2仍然適用),但我和它之間的主要問題是它總是過于賣力的想成為一個組件庫。而且其他框架和它走著相同的路——它們各寫各的類庫,但卻不使用現(xiàn)有的庫。這就搞得PHP有那么多獨立的庫,你想要使用就需要下載整個框架,臃腫的框架真令人頭疼。

#p#

2011年的新時代

為了改善這種情況,人們終于選擇要做一些事情。主要是在PHP 5.3的基礎上從頭開始重寫框架。建立新的標準,統(tǒng)一所有框架之間的接口,扔掉所有的遺留問題。這些聽起來容易,但只有通過這些事情,我們才能進入框架的新時代。

在CakePHP誕生之前我沒有用過任何PHP框架,所以我打算把它算作一個里程碑(其實我有些懷疑CakePHP就是***個PHP框架,當然你不會把Drupal當做框架的)。從CakePHP開始,至今六年過去了,這六年我稱為***個時代。2011年標志著第二個時代,全新的變革終將發(fā)生,我們會迎來各種各樣的版本發(fā)布和公告。

有趣的是,2011年的PHP好像不再是PHP了,或者可以說不再只是PHP了。有了Nginx和CouchDB這樣的新工具,惱人的LAMP stack用的越來越少了。如今集成功能和互操作性成為了關鍵因素。同樣,PHP 5.3更像是一個全新出籠的野獸,它能夠給你強大功能,但是并沒有真正的支持向后兼容。

我們來解決它,好嗎?

[[30072]]

圖三:來用GIT吧。

Git支持許多PHP框架,給我印象最深的是Symfony,因為它們已經(jīng)成功的吸引到大量的貢獻者,而對比前幾年,PHP框架最近步伐又快了很多。

PHP框架們在不停的完善著各種小修改。首先,所有的魔術(shù)函數(shù)現(xiàn)在已經(jīng)不見了,顯式定義隨處可見。此外,人們更多的考慮使用小尺寸的核心,通過擴展和類庫來附加功能,這是一個了不起的辦法,更易于使用框架,減少內(nèi)存占用。

性能是PHP框架面對的主要問題,大部分框架在新版本中都做了提升性能的安排。比如Symfony,在前端做了改進用來幫助管理資產(chǎn)(JavaScript和CSS),在PHP端由于清除了魔術(shù)函數(shù)和清理陳舊代碼,通過PHP 5.3得到了巨大的性能提高。

新功能

顯然,所有新的語言功能都包含在其中了,例如大多數(shù)的框架已經(jīng)開始支持命名空間,還有更早出現(xiàn)的PSR-0現(xiàn)在很好的集成到框架中,匿名函數(shù)也以各種各樣的方式在框架中找到了它們的位置。

依賴注射容器(Dependency injection container)和Annotation接口是我想提及的兩個,它們能夠改變你的編程方式。在Symfony中我很喜歡使用它們,現(xiàn)在其他的框架也正在迎頭趕上,開始把它們集成進去。這些結(jié)合上新的PHP功能,就可以創(chuàng)建出非常干凈的微型框架應用。

我并不喜歡直接把Java的功能列表移植到PHP來,Java的工作方式不同(而且需要1GB內(nèi)存)。我們看到它正一步步走來,但我有點擔心,因為我知道PHP喜歡輕一點的系統(tǒng),而不是復雜的對象。這些功能聽起來很炫,但實際上它們帶來的問題比解決的要多。

因此,什么時候?

[[30073]]

圖四:Symfony2發(fā)布

Zend Framework 2.0正在路上,但還需要一段時間。由于ZF有一個龐大的代碼庫,他們首先要做是把它轉(zhuǎn)換成命名空間代碼。完成之后,還要開始重新構(gòu)建原有功能和新功能。ZF目前正在做MVC方面的工作,我希望今年年底最終版能夠發(fā)布。

Lithium會來的快些,它還在dev模式,但似乎已經(jīng)很接近完成了。Lithium是一個和常規(guī)完全不同的框架,所以很值得看看。最觸動我的是它的AOP實現(xiàn),顯然它只支持PHP 5.3,但它對CouchDB和MongoDB支持的相當不錯。

在我看來Symfony2依然在領先群雄。目前它正在Beta2版,但最終版也只是幾個月的事兒了。Symfony2功能列表很難總結(jié),所以值得去它的網(wǎng)站查看一下,我想特別說一個——捆綁(Bundle)功能。捆綁是一種方法,可以通過外部的組件集合來擴展應用結(jié)構(gòu),想想插件吧。

結(jié)論

我對當前PHP行業(yè)發(fā)生的事情感到極度興奮,我相信這些一定會帶來重大的成就。我們終于可以扔掉所有(或者大多數(shù))的遺留問題,開始實施新的想法。從現(xiàn)在開始的五年之內(nèi),我們都會像今天一樣興奮。

原文地址:http://blog.webspecies.co.uk/2011-05-23/the-new-era-of-php-frameworks.html

【編輯推薦】

  1. 見微知著 大型網(wǎng)站PHP開發(fā)之道
  2. 草根語言PHP的進化史
  3. 中國應用開源腳本語言PHP的水平如何?
  4. 優(yōu)秀的PHP開發(fā)者是怎樣煉成的?
  5. 25個不錯PHP的游戲編程腳本代碼分享
責任編輯:陳貽新 來源: 51CTO
相關推薦

2011-09-10 19:23:22

2011-09-09 13:42:16

2024-12-04 10:39:00

Linux內(nèi)核技術(shù)性

2016-09-29 09:46:41

JavascriptWeb前端

2012-09-21 17:24:04

開源云平臺開源云計算標準OpenStack

2013-11-13 15:42:54

AndroidWPBlackBerry

2017-08-01 10:15:56

數(shù)據(jù)分析大數(shù)據(jù)

2010-04-09 15:24:55

2015-12-21 16:12:06

紅帽CloudForms混合云

2021-02-04 14:31:30

RISC-V架構(gòu)GPU

2013-01-18 10:09:10

互聯(lián)網(wǎng)網(wǎng)絡發(fā)展撥號上網(wǎng)

2013-10-21 10:38:19

Ubuntu 13.1Canonical

2019-03-08 09:54:29

華為

2017-05-10 09:57:11

小米手機智能

2015-07-28 11:29:59

電商亞馬遜沃爾瑪

2023-06-23 14:15:09

Rust編程

2024-02-29 19:37:44

網(wǎng)絡安全框架網(wǎng)絡安全CSF

2023-05-18 14:03:00

Transforme模型

2012-04-17 16:02:41

Marvell西部數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號