PHP
维基百科,自由的百科全书
![]() |
|
编程范型: | 物件導向、函數式 |
---|---|
設計者: | Rasmus Lerdorf |
實作者: | The PHP Group |
最近釋出日期: | 5.2.1 / 2007年2月8日 |
型態系統: | 動態、弱型別 |
啟發語言: | Perl、C |
作業系統: | 跨平台 |
許可證: | PHP License |
Website: | PHP License 3.01 |
PHP 是一种流行的开放源代码腳本语言。官方正式名稱为“PHP: Hypertext Preprocessor”的递归缩写。
PHP主要用於服务器端应用程序及動態網頁上,但是也可以用在命令列上執行,或是開發獨立的圖形使用者介面(GUI)。
目录 |
[编辑] 發展歷史
[编辑] PHP/FI
1994年,加拿大籍的程式設計師Rasmus Lerdorf開發了一組Perl腳本,用來追蹤他的線上履歷何時被使用到,他把這組腳本命名為"Personal Home Page Tools"。隨著這個腳本的功能日趨複雜,Lerdorf開始以C語言實做一些功能,例如連接資料庫、簡易的動態網頁開發。Lerdorf決定釋出這組程式的原始碼,讓大眾可以修改,並把這個程式命名為PHP/FI(Personal Home Page / Forms Interpreter的縮寫)。隨著PHP 3的出現,PHP/FI也很快的結束開發。
[编辑] PHP 3
1997年,Tel Aviv公司的Zeev Suraski和Andi Gutmans改寫PHP的解析引擎PHP/FI,Rasmus Lerdorf也決定中止PHP/FI的開發,並把PHP重新命名為"PHP: Hypertext Preprocessor"。經過9個月的測試,在1998年釋出了PHP 3。PHP 3最大的特色是加入了延伸函式庫的功能,吸引了許多人投入PHP延伸函式庫的開發,豐富了PHP的功能,另外物件導向的功能也在PHP 3開始出現(不過並不是很完整)。1999年兩人在以色列成立了Zend Technologies公司來投入PHP的開發工作,並且開始製作下一代的PHP解析引擎 - Zend引擎。
[编辑] PHP 4
2000年5月22日,以Zend引擎 1.0為解析引擎的PHP 4.0 发布。這也是PHP開始大受歡迎的版本,目前PHP 4還有在做安全性的更新,最新的版本是2007年2月發佈的PHP 4.4.5版。
[编辑] PHP 5
2004年7月13日,以Zend引擎II为基礎的PHP 5.0 发布,同時也加入了許多新特性:[1]
- 更完整的物件導向支持:基本上到PHP 5之後PHP才算是比較完整的面向对象語言。
- 透過新的Zend引擎,提昇了PHP執行的速度。
- 對MySQL資料庫有更完整的支持。
- 更佳的XML支持。
- 內建SQLite資料庫(但在PHP 5.1取消了內建,改用扩展函数庫的方式)。
- 整合了SOAP的支持。
- 提供例外處理。
- 新的資料庫存取介面PDO(PHP Data Objects)。
最新的版本是2006年2月發佈的5.2.1
[编辑] 應用
PHP主要應用在網頁伺服器,處理使用者的輸入來產生網頁。但是命令列腳本或是視窗程式介面(GUI)的開發也是PHP的主要應用範圍。
[编辑] 伺服器端腳本語言
PHP最初就是設計成伺服器端腳本語言,因此這也是PHP應用最廣的部份。在此領域有許多其他的競爭者,例如ASP.NET、ColdFusion、JSP、Perl、Ruby on Rails等等。
在網路工業領域,PHP是LAMP架構的其中一部分,所謂的LAMP是指Linux、Apache、MySQL、以及PHP所組成的網路環境,提供了許多安全、可靠的網頁應用程式。PHP目前已經是全世界最受歡迎的伺服器端腳本語言,跨平台的特性更是讓PHP廣為流傳,目前世界上有超過2000萬台伺服器安裝有PHP[2]。
[编辑] 命令列腳本
PHP也可以用命令列上執行來使用,例如分析紀錄檔、系統管理工作等。這些工作過去都是由一些其他的腳本語言例如Perl, Python, awk等來執行,PHP的在命令列上的使用則逐漸增加。
[编辑] 圖形使用者介面(GUI)
透過和GUI函式庫GTK+的結合,PHP也可以應用在圖形使用者介面(GUI)的開發上,目前的應用還不普遍。
[编辑] 語法
PHP的語法參考了Perl、C語言,而且可以整合在HTML之中,以下是一個簡單的Hello World程式:
<?php echo 'Hello World!'; ?>
PHP剖析引擎只剖析<?php到?>之間的程式碼,而不包含在<?php到?>之間的內容則會直接送出,所以可以用以下的方式來將PHP程式碼嵌入在HTML之中:
<?php //PHP程式碼 ?> html內容 <?php //PHP程式碼 ?>
但是在判断语句中的HTML代码并不会被直接送出:
<?php if (false) { ?> HTML Code <?php } ?>
PHP可以用三種註解的形式:C與C++所使用的“/*...*/”與“//”,和Perl的“#”。
[编辑] 類型
PHP主要有以下四種标量類型:
- 整数 (integer)
- 浮点数(float)
- 布林值 (boolean)
- 字串 (string)
两种复合类型:
- 陣列 (array)
- 对象(object)
两种特殊类型
- NULL
- 資源 (resource)[3]
[编辑] 变量
PHP中的变量用“$”后跟变量名表示。变量名是大小写敏感的。有效的变量名以字母或下划线打头,后跟任意数目的字母、数字或下划线。[4]
[编辑] 物件導向
PHP從PHP 3開始有了基本的物件導向的特性,但直到PHP 5將物件導向部份重新改寫之後,PHP的物件導向功能才比較完善。現在PHP可以說是一個有完整物件導向功能的語言。
[编辑] PHP相關資源
[编辑] 函式庫
內建多樣化的函數是PHP主要的特點之一,這些開放程式碼的函數提供了各種不同的功能,例如檔案處理、FTP、字串處理、等等。這些函數的使用方法和C語言相近(例如printf),這也是PHP廣為流行的原因之一。
除了內建的函數之外,PHP也提供了很多延伸函式庫(extension),像是各種資料庫連接函數、資料壓縮函數、圖形處理等等。有些延伸函式庫需要從PECL(PHP Extension Community Library)取得。
[编辑] 原始碼編碼和加速
PHP原始碼是可以直接讀取的,即使放到伺服器上執行也是一樣。雖然讓PHP多了彈性,但相對的會造成安全危機和性能下降的問題。
透過PHP編碼器,可以保護PHP的原始碼不被讀取(對商業軟體來說特別有需求),也可以提昇執行的效能。有許多公司或團體開發PHP的編碼器,將PHP程式編譯成位元組碼,再透過伺服器上安裝對應的程式來執行PHP腳本。
除了透過編碼器加速之外,PHP還可以透過動態的快取機制來提昇速度,加速工具有商業版的,例如Zend Platform,也有開放原始碼的加速軟體如eAccelerator、APC、XCache。
[编辑] 樣板引擎
樣板引擎讓PHP應用程式可以做邏輯和使用介面上的分離。其中一個受歡迎的樣板引擎是PHP官方開發的Smarty。
[编辑] PEAR
PEAR是PHP Extension and Application Repository的縮寫,由Stig S. Bakken於2000年在PHP開發者會議(PHP Developers' Meeting, PDM) 上提出,目的是實做可以重複使用的函式庫來提供PHP社群使用。到今天PEAR已經包含很多類型的函式庫,例如資料庫連接、內容快取、數學計算、電子商務等等。
[编辑] PECL
PECL是PHP Extension Community Library的縮寫,目的是提供PHP社群各種延伸函式庫。PECL在2003年從PEAR專案分離出來,現在已經是一個獨立運作的專案。
[编辑] 對PHP的批評
即使PHP是廣受歡迎的語言,但仍然受到很多的批評,例如:
- PHP沒有原生支援Unicode或是多位元字集(例如中文、日文、韓文等需要用兩個以上ASCII字元來表示的字集),導致用PHP寫的軟體在國際語言化上遇到相當多的困難。
- PHP沒有名字空間(Namespace)的設計,降低了PHP語言設計上的彈性,也導致函數名稱過長的問題。
- PHP的函數命名規則非常的混亂,許多函數功能類似,但是卻使用不同的函數名稱和參數順序,例如strpos($haystack, needle) 和 in_array($needle, $haystack)、strcasecmp 和 stristr,導致編寫PHP程式時需要做相當多的手冊查詢工作,初學者也往往不知不覺重新編寫已經內建的函數,降低了開發的效率。
- PHP的魔術引號(magic quotes)功能可以自動處理使用者輸入字串中的跳脫字元,有效避免SQL隱碼攻擊(SQL injection),但是因為不是每個使用者的輸入都會寫入到資料庫,處理這些沒有寫入資料庫的字串便浪費了效能。此外不是每個PHP環境都會開啟魔術引號,程式設計時需要便需要對不同的伺服器環境做因應,造成程式設計上的麻煩。魔術引號功能預計將會於PHP 6時取消。
- 有些PHP的延伸函式庫不是執行緒安全(threadsafe),導致PHP安裝在多執行緒的伺服器例如Apache 2上會發生不穩定的狀況。[5]
[编辑] 未來發展
PHP 6目前已經開始開發,將針對PHP 5的一些缺點做改進[6],例如:
- 原生Unicode支援
- 移除魔術引號(magic quotes)
- 移除全域變數(register_globals)
- 移除安全模式(safe_mode)
PHP 6許多的功能尚未定案,仍然在討論中,發佈的日期也尚未確定。
[编辑] 參考資料
[编辑] 相关链接
[编辑] 与PHP相关的资源
|
|
---|---|
文档呈现语言 | HTML* - XHTML* - XML* - XForms* - DHTML* |
样式格式描述语言 | CSS* - XSL* |
动态网页技术 | CGI - ASP - ASP.NET - ColdFusion - JSP - PHP |
客户端交互技术 | ActiveX - Java Applet - Flash - AJAX - XMLHTTP* |
客户端脚本语言 | JavaScript - JScript - VBScript - ECMAScript |
标识定位语言 | URL - URI - XPath |
文档纲要语言 | DTD* - XML Schema* |
*由W3C制定和维护的标准与规范 |
|
|
---|---|
工业编程语言 | A+ - ActionScript - Ada - zh-cn:汇编语言;zh-tw:組合語言 - B - Brainfuck - C - C++ - C++/CLI - COBOL - Curl - Delphi - Eiffel - Erlang - FORTRAN - IronPython - Java - JavaScript - JRuby - JScript - Jython - LISP - Lua - MATLAB - MATHEMATICA - Nuva - Oberon - Objective-C - OCaml - Pascal - Perl - PHP - PostScript - Powerbuilder - Python - R - REXX - Ruby - Self - Smalltalk - SQL - Tcl/Tk - C# - F# - J# - Microsoft Visual C# - Microsoft Visual C++ |
BASIC语言 | BASIC - BASICA - GW-BASIC - QBASIC - QuickBASIC - True BASIC - Turbo BASIC Visual Basic .NET - Visual Basic - VBScript - VBA |
GPU用著色器語言 | Cg - GLSL - HLSL |
学术编程语言 | APL/J - Haskell - Logo - ML - Prolog - Scheme - SAC |
其他编程语言 | ALGOL - Clipper - Forth - Modula-2/Modula-3 - MUMPS - PL/I - Simula |