PHP - 維基百科，自由嘅百科全書

# PHP

### 出自維基百科，自由嘅百科全書

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內容
    <?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函式庫列表

內建多樣化嘅函式係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好多功能仲未定案，仍然討論緊，發佈嘅日期亦仲未確定。

## [編輯] 參考資料

1. ↑ http://www.onlamp.com/pub/a/php/2004/07/15/UpgradePHP5.html
2. ↑ http://www.php.net/usage.php
3. ↑ Types Introduction，The PHP Group
4. ↑ Language variables，The PHP Group
5. ↑ http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2
6. ↑ http://www.php.net/~derick/meeting-notes.html

## [編輯] 連出去

- PHP首頁
- PHP-GTK首頁
- PHP相關自由軟體

### [編輯] 同 PHP 有關嘅資源

- 台灣 PHP 聯盟
- PHP5 研究室
- 超越 PHP
- 中文 PHP 搜索引擎
- PHP 中國 (PHP China Community)
- PHP 程式設計講義區 for 台中市網【PHP程式語言編寫】研習課程

由 "http://zh-yue.wikipedia.org../../../p/h/p/PHP_2fec.html" 接收

分類: 程式語言

##### Views

- 文章
- 討論
- 家下嘅版本

##### 交流

- 關於維基百科
- 社區大堂
- 城市論壇
- 詢問處
- 聯絡我哋
- 慷慨解囊
- 幫手

##### 搵嘢

##### 其他語言

- Afrikaans
- Alemannisch
- Aragonés
- العربية
- Azərbaycan
- Български
- Bosanski
- Català
- Česky
- Dansk
- Deutsch
- Ελληνικά
- English
- Esperanto
- Español
- Eesti
- Euskara
- فارسی
- Suomi
- Français
- Galego
- עברית
- Hrvatski
- Magyar
- Bahasa Indonesia
- Íslenska
- Italiano
- 日本語
- Қазақша
- 한국어
- Kurdî / كوردي
- Latina
- Lëtzebuergesch
- Lietuvių
- Latviešu
- Македонски
- Bahasa Melayu
- Nederlands
- ‪Norsk (bokmål)‬
- Polski
- Português
- Română
- Русский
- Srpskohrvatski / Српскохрватски
- Simple English
- Slovenčina
- Slovenščina
- Shqip
- Српски / Srpski
- Svenska
- Тоҷикӣ
- ไทย
- Türkçe
- Українська
- Tiếng Việt
- 中文