PHP(php語言)

PHP(超文本預處理器)

php語言一般指本詞條

本詞條是多義詞,共3個義項
更多義項 ▼ 收起列表 ▲

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言語法吸收了C語言JavaPerl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了CJavaPerl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的程式語言相比,PHP是將程式嵌入到HTML標準通用標記語言下的一個套用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密最佳化代碼運行,使代碼運行更快。

基本介紹

  • 中文名:超文本預處理器
  • 外文名:PHP: Hypertext Preprocessor
  • 編程范型:面向對象、命令式編程
  • 設計者:Rasmus Lerdorf
  • 維護:The PHP Group
  • 最新版本:PHP 5.6.0(28 Aug 2014)
  • 作業系統:windows/linux/Mac跨平台
  • 外語縮寫:PHP
發展,開發工具,特性,優勢,開放原始碼,免費性,快捷性,跨平台性強,效率高,圖像處理,面向對象,專業專注,技術套用,參考手冊,版本區別,選擇版本,VC6與VC9,TS和NTS,查看版本,PHP3,PHP4,簡介,優越性,PHP5,新對象模式,異常處理,命名空間,加密,版本6構想,環境配置,Windows下,安裝過程,UNIX下,其他方面,

發展

PHP原始為Personal Home Page的縮寫,已經正式更名為 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的縮寫,這種將名稱放到定義中的寫法被稱作遞歸縮寫。PHP於1994年由Rasmus Lerdorf創建,剛剛開始是Rasmus Lerdorf為了要維護個人網頁而製作的一個簡單的用Perl語言編寫的程式。這些工具程式用來顯示 Rasmus Lerdorf 的個人履歷,以及統計網頁流量。後來又用C語言重新編寫,包括可以訪問資料庫。他將這些程式和一些表單直譯器整合起來,稱為 PHP/FI。PHP/FI 可以和資料庫連線,產生簡單的動態網頁程式。
PHP安裝PHP安裝
在1995年以Personal Home Page Tools (PHP Tools) 開始對外發表第一個版本,Lerdorf寫了一些介紹此程式的文檔。並且發布了PHP1.0!在這的版本中,提供了訪客留言本、訪客計數器等簡單的功能。以後越來越多的網站使用了PHP,並且強烈要求增加一些特性。比如循環語句和數組變數等等;在新的成員加入開發行列之後,Rasmus Lerdorf 在1995年6月8日將 PHP/FI 公開發布,希望可以透過社群來加速程式開發與尋找錯誤。這個發布的版本命名為 PHP 2,已經有 PHP 的一些雛型,像是類似 Perl的變數命名方式、表單處理功能、以及嵌入到 HTML 中執行的能力。程式語法上也類似 Perl,有較多的限制,不過更簡單、更有彈性。PHP/FI加入了對MySQL的支持,從此建立了PHP在動態網頁開發上的地位。到了1996年底,有15000個網站使用 PHP/FI。
ISAPI篩選器ISAPI篩選器
在1997年,任職於 Technion IIT公司的兩個以色列程式設計師:Zeev Suraski 和 Andi Gutmans,重寫了 PHP 的剖析器,成為 PHP 3 的基礎。而 PHP 也在這個時候改稱為PHP:Hypertext Preprocessor。經過幾個月測試,開發團隊在1997年11月發布了 PHP/FI 2。隨後就開始 PHP 3 的開放測試,最後在1998年6月正式發布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 發布後開始改寫PHP 的核心,這個在1999年發布的剖析器稱為 Zend Engine,他們也在以色列的 Ramat Gan 成立了 Zend Technologies 來管理 PHP 的開發。
在2000年5月22日,以Zend Engine 1.0為基礎的PHP 4正式發布,2004年7月13日則發布了PHP 5,PHP 5則使用了第二代的Zend Engine。PHP包含了許多新特色,像是強化的面向對象功能、引入PDO(PHP Data Objects,一個存取資料庫的延伸函式館)、以及許多效能上的增強。PHP 4已經不會繼續更新,以鼓勵用戶轉移到PHP 5。
PHPPHP
2008年PHP 5成為了PHP唯一的有在開發的PHP版本。將來的PHP 5.3將會加入Late static binding和一些其他的功能強化。PHP 6 的開發也正在進行中,主要的改進有移除register_globals、magic quotes 和 Safe mode的功能。
PHP最新穩定版本:5.4.30(2013.6.26)
PHP最新發布的正式版本:5.5.14(2014.6.24)
PHP最新測試版本:5.6.0 RC2(2014.6.03)
2013年6月20日,PHP開發團隊自豪地宣布推出PHP 5.5.0。此版本包含了大量的新功能和bug修復。需要開發者特別注意的一點是不再支持 Windows XP 和 2003 系統。
2014年10月16日,PHP開發團隊宣布PHP 5.6.2可用。四安全相關的錯誤是固定在這個版本,包括修復cve-2014-3668,cve-2014-3669和cve-2014-3670。所有的PHP 5.6鼓勵用戶升級到這個版本。

開發工具

集成開發環境是一種集成了軟體開發過程中所需主要工具的集成開發環境,其功能包括但不僅限於代碼高亮、代碼補全、調試構建版本控制等。一些常見的PHP IDEs如下:
  • Zend Studio:商業版,Zend官方出品,基於eclipse
  • Eclipse with PDT:免費
  • Coda:商業版,針對Mac用戶
  • NetBeans:免費,功能強大
  • PHP Storm:商業版
  • Aptana Studio:免費
  • PhpEd:商業版
  • Komodo IDE/Edit:IDE為商業版,Edit可免費使用
  • Adobe Dreamweaver:商業版
除去集成開發環境,具備代碼高亮功能的常見文本編輯器因其輕巧靈活也常被選作開發工具,例如:Notepad++EditplusSublimeText、Everedit(國人開發)等等。

特性

PHP的特性包括:
1. PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法。
2. PHP可以比CGI或者Perl更快速的執行動態網頁——動態頁面方面,與其他的程式語言相比,
PHP是將程式嵌入到HTML文檔中去執行,執行效率比完全生成htmL標記的CGI要高許多;
PHP具有非常強大的功能,所有的CGI的功能PHP都能實現。
3. PHP支持幾乎所有流行的資料庫以及作業系統
4. 最重要的是PHP可以用C、C++進行程式的擴展!

優勢

開放原始碼

所有的PHP原始碼事實上都可以得到。

免費性

和其它技術相比,PHP本身免費且是開原始碼。

快捷性

程式開發快,運行快,技術本身學習快。嵌入於HTML:因為PHP可以被嵌入於HTML語言,它相對於其他語言。編輯簡單,實用性強,更適合初學者。

跨平台性強

由於PHP是運行在伺服器端的腳本,可以運行在UNIXLINUXWINDOWSMac OSAndroid等平台

效率高

PHP消耗相當少的系統資源

圖像處理

用PHP動態創建圖像,PHP圖像處理默認使用GD2。且也可以配置為使用image magick進行圖像處理。

面向對象

在php4,php5 中,面向對象方面都有了很大的改進,php完全可以用來開發大型商業程式。

專業專注

PHP支持腳本語言為主,同為類C語言。

技術套用

  1. 過程快取
  2. div+cssw3c標準
  3. 大負荷
  4. 桌面程式套用(不擅長)
  5. 支持MVC模型
  6. Smarty模版引擎

參考手冊

函式完整參考手冊:
序號分類描述
1
Array 函式
2
Calendar 函式
日曆擴展包含了簡化不同日曆格式間的轉換的函式。
3
Date/Time 函式
Date/Time 函式用於從 PHP 腳本運行的伺服器上獲取日期和時間並進行格式化。
4
Directory 函式
Directory 函式用於獲得關於目錄及其內容的信息。
5
Error/Logging 函式
Error/Logging 函式用於對錯誤進行處理和記錄。
6
Filesystem 函式
Filesystem 函式用於訪問和操作檔案系統。
7
Filter 函式
PHP 過濾器用於對來自非安全來源的數據(比如用戶輸入)進行驗證和過濾。
8
FTP 函式
FTP 函式通過檔案傳輸協定 (FTP) 提供對檔案伺服器的客戶端訪問。
9
HTTP 函式
HTTP 函式用於對由 Web 伺服器傳送到瀏覽器的信息進行操作。
10
Libxml 函式
Libxml 函式和常量與 SimpleXML、XSLT 以及 DOM 函式一起使用。
11
Mail 函式
mail() 函式用於從腳本中直接傳送電子郵件。
12
Math 函式
Math 函式能處理 integer 和 float 範圍內的值。
13
雜項函式
我們把不屬於其他類別的函式歸納到雜項函式類別。
14
MySQLi 函式
MySQLi 函式用於訪問 MySQL 資料庫伺服器。
15
SimpleXML 函式
SimpleXML 擴展提供了一種獲取 XML 元素的名稱和文本的簡單方式。
16
String 函式
17
XML Parser 函式
XML Parser 函式允許您創建 XML 解析器,並為 XML 事件定義句柄。
18
Zip File 函式
Zip File 函式允許您讀取壓縮檔案。

版本區別

PHP版本VC6與VC9、Thread Safe與None-Thread Safe等的區別
PHP的大版本主要分三支:PHP4/PHP5/PHP6
其中,PHP4由於太古老、對QQ支持不力已基本被淘汰,請無視PHP4。
PHP6由於基本沒有生產線上的套用,還基本只是一款概念產品,很多功能已在PHP5.3.3上實現,所以也不詳述,請無視PHP6。
PHP5的版本主要分四支:PHP5.2之前的版本、PHP5.2.X、PHP5.3和日前發布的PHP5.4。

選擇版本

PHP5.2之前的版本不值得考慮,因為某些功能缺陷或者BUG。PHP5.4還處於Beta試用的版本號,非穩定版本,請無視PHP5.4。
主流PHP程式對PHP5.2.X的兼容性最好,而每次版本號的升級帶來的都是安全性和穩定性的改善,所以宜挑選最新的版本。目前PHP5.2系列最新的是PHP5.2.17。
而如果產品是自己開發自己使用,PHP5.3在某些方面更具優勢,在穩定性上更勝一籌,增加了很多PHP5.2所不具有的功能,比如內置php-fpm、更完善的垃圾回收算法、命名空間的引入、sqlite3的支持等等,是部署項目值得考慮的版本,強烈推薦PHP5.3.3。
除了版本號的不同,同一版本號的PHP版本也有區別,並且在選擇PHP擴展的時候需要注意。
  • install版:可執行的MSI格式安裝包。
  • ZIP版:解壓即可用。和install版無區別。建議選擇ZIP版。
  • DEBUG版:最終用戶無需關心。

VC6與VC9

如果你在apache1或者apache2下使用PHP,你應該選擇VC6的版本
如果你在IIS下使用PHP應該選擇VC9的版本,VC6的版本使用visual studio6編譯,VC9使用Visual Studio 2008編譯,並且改進了性能和穩定性。VC9版本的PHP需要你安裝Microsoft 2008 C++ Runtime。不要在apache下使用VC9的版本。

TS和NTS

TS指Thread Safety,即執行緒安全,一般在IIS以ISAPI方式載入的時候選擇這個版本。
NTS即None-Thread Safe,一般以fast cgi方式運行的時候選擇這個版本,具有更好的性能。
從2000年10月20日發布的第一個Windows版的PHP3.0.17開始的都是執行緒安全的版本,這是由於與Linux/Unix系統是採用多進程的工作方式不同的是Windows系統是採用多執行緒的工作方式。如果在IIS下以CGI方式運行PHP會非常慢,這是由於CGI模式是建立在多進程的基礎之上的,而非多執行緒。一般我們會把PHP配置成以ISAPI的方式來運行,ISAPI是多執行緒的方式,這樣就快多了。但存在一個問題,很多常用的PHP擴展是以Linux/Unix的多進程思想來開發的,這些擴展在ISAPI的方式運行時就會出錯搞垮IIS。因此在IIS下CGI模式才是 PHP運行的最安全方式,但CGI模式對於每個HTTP請求都需要重新載入和卸載整個PHP環境,其消耗是巨大的。
為了兼顧IIS下PHP的效率和安全,微軟給出了FastCGI的解決方案。FastCGI可以讓PHP的進程重複利用而不是每一個新的請求就重開一個進程。同時FastCGI也可以允許幾個進程同時執行。這樣既解決了CGI進程模式消耗太大的問題,又利用上了CGI進程模式不存線上程安全問題的優勢。
因此,如果是使用ISAPI的方式來運行PHP就必須用Thread Safe(執行緒安全)的版本;而用FastCGI模式運行PHP的話就沒有必要用執行緒安全檢查了,用None Thread Safe(NTS,非執行緒安全)的版本能夠更好的提高效率。

查看版本

一個很簡單的辦法就是phpinfo();
Thread Safety disabled是NTS,enabled是TS
Configure Command看到VC98字樣的是VC6,Compiler標明 MSVC9 (Visual C++ 2008) 的是VC9
在WIN7下:IIS7+NTS+FastCGI+vc9 是最佳搭檔或者apache+fastcgi+nts+vc6。
在WINXP下:Apache+TS+Apache module +vc6最合適的搭檔。

PHP3

PHP3跟Apache伺服器的緊密結合的特性;加上它可以不斷的更新及加入新的功能,而且幾乎支持所有主流與非主流資料庫。再以它能高速的執行效率,使得PHP在1999年中的使用站點已經超過了150000。加上它的原始碼完全公開,在 Open Source意識抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函式庫加入,以及不停地更新的活力。使得PHP無論在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供豐富的函式,使得在程式設計方面有著更好的支持。
PHPPHP

PHP4

簡介

PHP4.0整個腳本程式的核心大幅更動,讓程式的執行速度,滿足更快的要求。在最佳化之後的效率,已較傳統CGI或者ASP等程式有更好的表現。而且還有更強的新功能、更豐富的函式館。無論您接不接受,PHP 都將在 Web CGI 的領域上,掀起巔覆性的革命。對於一位專業的Web Master 而言,它將也是必修課程之一。
PHP 4.0是更有效的,更可靠的動態Web頁開發工具,在大多數情況運行比 PHP 3.0要快,其腳本描述更強大並且更複雜,最顯著的特徵是速率比的增加。PHP4.0這些優異的性能是PHP腳本引擎重新設計產生的結果:引擎由AndiGutmans和Zeev Suraski從底層全面重寫。PHP4.0 腳本引擎 ——Zend引擎,使用了一種更有效的編譯——執行方式,而不是PHP 3.0 採用的執行 ——當解析時模型

優越性

PHP4在3.0版的基礎上增加或增強了許多有用的特徵,主要如下:
(1)別名:在PHP4中,可以利用引用為變數賦值,這給編程帶來了很大的靈活性。
(2)擴充了API模組:PHP 4.0 為擴展的 API 模組的提供了擴展PHP接口模組,它比舊的 API 版本顯著地快。PHP 模組已有的及最常用的接口多數被轉換到使用這個擴展的接口。
(3)自動資源釋放:PHP4增加了引用計數功能,這種新技術的引入使PHP4具有了自動記憶體管理功能,減輕了開發人員的負擔。
(4)布爾類型:PHP 4.0 支持布爾類型。
(5)進程生成:在 UNIX 環境下的 PHP 4.0 提供了一個很智慧型和通用的生成進程,使用了一種名為基於automake/libtool的系統生成技術。
(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 僅用於Windows 環境 ) 可以無縫地存取和訪問 COM 對象。
(7)與PHP 3.0 兼容性很好:PHP 4.0 是與 PHP 3.0 代碼向後兼容性接近100%。由於 PHP 4 的改進的體系結構,兩者有一些細微的差別,但是大多數人將可能永遠不可能遇上這種情況。
(8)配置:PHP4重新設計和增強了PHP.ini檔案,這使得用PHP.ini來配置PHP顯得極為容易,這個檔案可以在運行時被Apache(unix系統)或由Windows 註冊(Windows 環境)。
(9)加密支持:PHP4實現了完整的加密,這些加密功能是一個完整的mycrypt庫,並且 PHP 4.0 支持哈希函式。Blowfish,TripleDES,MD5,並且SHA1 也是可使用的一些加密算法。
(10)類型檢查:PHP 4.0 支持同一操作符用於評類型檢查:===(3 等號運算符,恆等計算符),為在兩個值和其類型之間作檢查。例如,'3' ===3 將視為假 ( 類型是不同的),而 3 ==3 ( 相等判斷,不比較類型 ) 將視為真。
(11)FTP 支持:PHP 4.0 支持 FTP。通常,你會為通過一個數據機連線下載一個大檔案提供一個接口。然而,如果你確實有需要,可以使用PHP。
(12)PHP4新增函式或功能增強函式:PHP 4.0 新增了許多函式,同時也將許多現有的函式功能進行了增強,以下是一些例子。array_count_values() eval() foreach() include() ob_end_clean() ob_end_flush() ob_get_contents() ob_start()strip_tags() unset()。
(13)here列印:PHP 4.0 的Here列印是與Perl類似的,儘管完全不相同。Here是列印大容量文章的一個有用的方法,例如在HTML檔案中,不會漏掉任何一個字元,例如目錄標記。
(14)HTTP Session fallback 系統:為 HTTP Session管理的一個 fallback 系統在 PHP 4.0被實現。預設情況下,Session標識符由cookies存儲。如果沒有cookies支持或一項cookies任務失敗,Session標識符自動被創建並在 URL 的查詢字元串中被攜帶。
(15)ISAPI 支持:PHP 4.0 能作為一個個性化的 ISAPI 模組作為IIS外掛程式。這比 PHP 3.0 更有效,它作為一個外部的程式來運行。
(16)記憶體:PHP 4.0 能更有效的使用記憶體,導致較少的記憶體占用消耗,這主要歸功於引用計數技術的實現。⒄其他類成員函式:在 PHP 4.0 你能在成員函式本身的作用域或全局範圍內調用其他類的成員函式。例如,你能用一個子函式覆蓋父函式,並在子函式中調用父函式。
(17)多維數組:在 PHP 4.0 ,利用GET,POST,Cookies的進行的數據傳輸支持多維數組。
(18)個性化的 HTTPSession支持:HTTP Session處理,包括 fallback系統管理,在 PHP 4.0被它的新庫函式實現。在版本 3.0 中處理Session要求使用 PHPLIB 和第三方的庫函式,它比把Session直接地由 PHP 支持慢了許多。
(19)個性化的 Java 支持:PHP 4.0 支持和java的互動。這種個性化的Java 支持為PHP 在 Java 對象上創建和使用方法提供一個簡單並且有效的工具。
(20)對象和數嵌套組:PHP 4.0 實現了功能更加強大的對象,移去了 PHP 3.0存在的種種句法限制。對象能在數組以內被嵌套並且反過來也如此,可以根據你的需要實現嵌套。
(21)面向對象的編程:PHP 4.0 為面向對象的編程和構造類及對象提供擴展的功能和新特徵。PHP4實現了對象重載,引用技術等新技術。
(22)對象重載支持:對象重載語法允許第三方的基於面向對象的類庫使用 PHP4 的面向對象的特徵存取他們自身的功能。使用這個特徵的一個 COM 模組已經被實現了。
(23)輸出緩衝支持:PHP 提供了一個輸出緩衝函式集合。輸出緩衝支持允許你寫包裹函式功能壓縮緩衝區。在 PHP4 的輸出緩衝支持允許 HTML 頭信息存放,無論 HTML的正文是否輸出。頭信息( (header(),content type,and cookies ) 不採用緩衝。
(24)增加了PCRE庫:PHP 4.0 包括一個 Perl 兼容的正則表達式(PCRE ) 庫,和正常regex庫一起與 PHP 綁定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正規表達式之間有一些細微差別。
(25)PHP.ini 檔案:PHP.ini檔案在 PHP4.0 被重新設計,使用的 PHP 的配置PHP.ini是更容易並且更有效的。全部檔案能被Apache 在運行時間操作 ( 在 Apache環境 下 ) 或由 Windows 註冊表 ( 在 Windows 下面 )。被加入PHP.ini檔案的配置指令自動地在所有相關的模組中被支持。
(26)引用計數:PHP 4.0 為系統中的每個數值提供了引用計數,包括資源。一旦一個資源不再被任何變數引用,它自動地被釋放以節省記憶體資源。利用這個特徵的最明顯的例子一個內置SQL查詢的循環語句。在PHP 3.0中 ,每次遞歸另外的 SQL 結果集合重複申請記憶體,直到腳本執行完畢,這些結果集合占用的記憶體才被釋放。
(27)支持引用:通過引用可以改變一個變數的值。
(28)函式的運行時綁定:PHP 4.0 的運行時間綁定功能允許你在他們被聲明以前調用,無論聲明是否在代碼以後或是在運行時間。
(29)類的運行時信息:PHP 4.0 支持在運行時刻存取下列類信息:一個對象的類名,一個對象的父類的類名字,以及對象函式所在的名字。
(30)伺服器抽象層:為支持Web伺服器提供了增強型 SAPI ( 伺服器 API ) 接口,是 PHP 4.0 不可分的一部分。這個伺服器抽象層,提供了通用的WEB伺服器接口支持,支持多執行緒WEB伺服器,為大多數的WEB伺服器提供透明的支持,這些伺服器包括 Apache,IIS ( ISAPI ),以及 AOL 伺服器。
(31)語法的點亮顯示:PHP 4.0 語法的點亮顯示允許開發者看見原始碼而不是腳本,這個功能比PHP 3.0中的更有效。它跑得更快,更執行得更好,並且產生更緊湊的HTML代碼。
(32)由引用改變變數的值:PHP 4.0 由引用支持可變的賦值,“關聯”的2個變數之中個的任何一個的值被改變,另外的變數的值同樣被改變,這類似與C中的指針類型。
(33)在引用字元串中的變數引用:PHP 4.0 增強了在引用字元串中的變數引用。

PHP5

PHP5在長時間的開發及多個預發布版本後,2004年7月13日,PHP5.0發布。該版本以Zend引擎Ⅱ為引擎,並且加入了新功能如PHP Data Objects(PDO)。PHP5.0版本強化更多的功能。首先,完全實現面向對象,提供名為PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直觀地訪問XML數據、名為SimpleXML的XML處理用界面。同時還強化了XMLWeb服務支持,而且標準支持SOAP擴展模組。資料庫方面,PHP新版本提供旨在訪問MySQL的新界面——MySQL。除此前的界面外,還可以使用面向對象界面和預處理語句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上還捆綁有小容量RDBMS-SQLite.

新對象模式

*構造函式析構函式 * 對象的引用 * 對象的克隆 * 對象中的私有、公共及受保護模式 * 接口 (Interfaces)
* 抽象類 * __call * __set 和 __get * 靜態成員
構造函式和析構函式
在 PHP4 中,當函式與對象同名時,這個函式將成為該對象的構造函式,並且在 PHP4 中沒有析構函式的概念。
在 PHP5 中,構造函式被統一命名為 __construct,並且引入了析構函式的概念,被統一命名為 __destruct。
對象的引用
在PHP4中,傳遞變數給一個函式或方法,實際是把這個變數做了一次複製,也就意味著你傳給函式或方法的是這個變數的一個副本,除非你使用了引用符號“&;” 來聲明是要做一個引用,而不是一個 Copy。在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。
對象的克隆
當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎么辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。
抽象
抽象類不能被實例化。
抽象類與其它類一樣,允許定義變數及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。
__call
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。
__set 和 __get
這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變數和方法。
類型指示
在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的實例。
靜態成員
靜態成員和靜態方法在面象對象編程的術語中被稱作 “類方法(class methods)” 和 “類變數(class variables)”。
“類方法” 在一個對象沒有實例化前允許被調用。同樣,“類變數” 在一個對象沒有實例化前可以被獨立操作控制(不需要用一個對象的方法來控制)。

異常處理

異常處理是公認的處理程式錯誤的理想方法,在 Java及 C 中都有這個概念,我們欣喜的看到,在 PHP5 已經加入了這方面的套用。你可以嘗試使用 “try” 和 “catch” 來控制程式的錯誤。當有錯誤發生的時候,代碼會把錯誤交給 “catch” 子句來處理,在 “catch” 子句中,你需要指明要把錯誤交給某個對象處理,這樣做可以使代碼結構看起來更清晰,因為我們可以把所有的錯誤信息交給一個對象來處理。
自定義錯誤處理
你可以很方便的用自定義的處理錯誤的代碼來控制你的程式中的意外。你僅僅需要從異常類中派生出一個自己的錯誤控制類,在你自己的錯誤控制類中,你需要有一個構造函式和一個 getMessage 方法。

命名空間

名稱空間對類的分組或函式分組很有用。它可以把一些相關的類或函式給組合到一起,方便以後調用。
例:名稱空間
<?phpnamespacemy\name;//參考"定義命名空間"小節classMyClass{}functionmyfunction(){}constMYCONST=1;$a=newMyClass;$c=new\my\name\MyClass;//參考"全局空間"小節$a=strlen('hi');//參考"使用命名空間:後備全局函式/常量"小節$d=namespace\MYCONST;//參考"namespace操作符和__NAMESPACE__常量”小節$d=__NAMESPACE__.'\MYCONST';echoconstant($d);//參考"命名空間和動態語言特徵"小節?>
注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那么你就可以把他們分別放到不同的名稱空間中去(但接口是要相同的)。

加密

從PHP5.3開始支持ZendGuard加密方式,必須安裝Zend Guard Loader,老的zend optimizer將不被支持。
Linux安裝Zend Guard Loader支持的過程:
作業系統為CentOS5.5,PHP版本為5.3.8(CentOS5.5中的PHP默認版本較低,如果要升級到PHP最新版,可以使用remi的report源進行升級)。
Windows 下面的 Zend Guard Loader 不支持php5.3.8 VC9 x86 Thread Safe而,php5.3.8 VC9 x86 Non Thread Safe 又不支持 apache。所以安裝的話,就需要安裝在iis或者和nginx搭配。
1、下載最新的Linux作業系統系下的Zend Guard Loader。
2、上傳至Linux伺服器並解壓縮,注意閱讀生成目錄下的README檔案。全文如下(添加必要的注釋)。在/etc/php.d/目錄下創建檔案zend.ini,內容如下:
zend_extension=/usr/lib64/php/modules/ZendGuardLoader.so
注意路徑一定要寫上,剛開始沒寫路徑,老是載入不上ZendGuardLoader .so,也可以直接將上面的配置寫入/etc/php.ini檔案中,效果一樣。
3、重啟httpd服務:service httpd restart。
4.輸出<?php phpinfo(); ?>
PHP 5.5 正式版發布 不再支持 Windows XP
同時 PHP 開發者也提醒用戶,PHP 5.5 也包含一些不向後兼容的內容,包括:不再支持 Windows XP 和 2003 系統;不區分大小寫的匹配函式、類;常數名稱跟 Locale 無關,這對一些使用非 ASCII 代碼的常量名的開發者需要注意的。

版本6構想

1、支持Unicode。Unicode是有其必然,雖然Unicode占用較多的空間,但Unicode帶來的便利性,遠超過占用空間的缺點,尤其在國際化的今天,硬體設備越來越強大,網速也大幅度的提升,這么一點小小的缺點是可以忽略的。另外一點,PHP也可以在.ini檔案中設定能不能開啟支持Unicode,決定權在你自己,這是一個不錯的點子,關掉Unicode的支持,PHP的性能並不會有大幅度的提升,主要的影響在於需要引用字元串的函式。
2、Register Globals 將被移除這是一個主要的決定,老的PHP使用者會覺得Register Globals滿方便的,但是卻忽略了Register Globals會帶來程式上安全性的隱患,大多數的主機上此項功能是關閉的,印象中從PHP4.3.x版開始,此項默認配置值即是關閉狀態,PHP6正式移除Register Globals也代表著如果程式是PHP3時代的產物,將完全不能運用,除了改寫用途外,別無他法。
3、Magic Quotes 將取消Magic Quotes主要是自動轉義須要轉義的字元,此項功能移除也符合大多數PHP開發者的心聲。
4、Safe Mode 取消。老實說,這個模式不知道哪裡不好,取消就取消吧,反正也用不到。
5、’var’ 別名為 ‘public’,在類中的var聲明變成public的別名,相信是為了兼容PHP5而作的決定,PHP6現在也可以稱作為OO語言了。
6、通過引用返回將出錯未來通過引用返回編譯器將會報錯 例如$a =& new b()、function &c(),OO語言默認就是引用,所以不須要再運用 &了。
7、zend.ze1 compatbility mode 將被移去(Zend.ze1相容模式將被移去),PHP5是為兼容舊有PHP4,所以在.ini中可選擇是否開啟相容模式,原由在於PHP5運用的是第二代分析引擎,但是相容模式並不是百分之百能分析 PHP4語法,所以舊時代的產物,移除。
8、Freetype 1 and GD 1 support 將不見這兩個Libs存在了很久,php6將不再支持,況且GD1早已被現在的GD2取代了。
9、dl() 被移到 SAPI 中dl()主要是讓設計師載入extension Libs,被移到 SAPI 中。
10、Register Long Array 去除 從PHP5起默認是關閉,在PHP6中正式移除。
11、一些Extension的變更例如 XMLReader 和 XMLWriter 將不再是以Extension的方式出現,他們將被移入到PHP的核心之中,並且默認是開啟,eregextension將被放入PECL,代表著它將被移出PHP核心,這也是為了讓路給新的正則表達式extension,此外,Fileinfo extension 也將被導入PHP的核心之中。
12、APC將被導入核心這是一個提高PHP性能的功能,它將被放入PHP核心中,並且可以選擇是否啟用APC。
13、告別ASP風格的起始標籤原來是為了取悅ASP開發者轉向運用 PHP,現今已經不再須要這種做法了。
最後,別期望PHP6的性能可以徹底超過PHP5,有可能PHP6的執行效率會比PHP5還要來得慢,但是可以預期的是,PHP開發小組將會努力的完善PHP6,超越PHP5。

環境配置

Windows下

軟體需求(最新版)
Windows Vista 或更高版本;
Apache 2+ 或 IIS 6+ 或 Nginx

安裝過程

  1. 將 Apache 1.3.19 安裝到 C:\Web\apache\ 目錄下。
  2. 將 PHP 4.0.5 解壓到 C:\Web\php\ 目錄下。
  3. 將 MySQL 3.23.38 安裝到 C:\Web\mysql\ 目錄下。
  4. 將 C:\web\php\php4ts.dll 檔案拷貝到 C:\WINNT\system32\ 目錄下。
  5. 將 C:\web\php\php.exel 檔案拷貝到 C:\WINNT\ 目錄下。
  6. 將 C:\web\php\php.ini-dist 檔案拷貝到 C:\WINNT\ 目錄下,並將php.ini-dist 更名為 php.ini。
  7. 運行 C:\Web\apache\Apache\Apache.exe-i –n
  8. 運行 C:\Web\mysql\bin\mysqld-nt.exe--install
  9. 編輯 C:\WINNT\php.ini
找到 “extension_dir = ./ ” 欄位,將其改為 extension_dir = "C:\myphp\php\extensions"。
編輯 C:\Web\apache\Apache\conf\httpd.conf
找到“ #BindAddress*” 欄位
將其改為 BindAddress127.0.0.1。(如果主機有固定IP位址,此處改為主機IP位址。如 BindAddress 211.101.152.106),找到 “ServerName” 欄位,將其改為 ServerName localhost。(如主機有固定主機名,此處改為主機的主機名。如ServerName bn001)。
找到“ ScriptAlias /cgi-bin/ "C:/Web/apache/Apache/cgi-bin/" ” 欄位,在其下面加入 ScriptAlias /php/ "C:/Web/php/"。找到 “# And for PHP 4.x,use: ” 欄位,在其後面加入:
AddTypeapplication/x-httpd-phpActionApplication/x-httpd-php"c:/Web/php/php.exe"
找到“ #LoadModule usertrack_module modules/mod_usertrack so” 欄位,LoadModule php4_module c:/web/php/sapi/php4apache.dll

UNIX下

所需軟體
php-3.0.14-win32.zip;php-3.0.14-win32.zip;mysql-shareware-3.22.32-win.zip
所有軟體均安裝在/export/home/guoj/下,也可在其他目錄。
安裝mysql
gzip-dcmysql-3.22.30.tar.gz|tarxvf-cdmysql-3.22.30./configure-prefix=/export/home/guoj/mysqlmakemakeinstallscripts/mysql_install_dbcd../mysql/binbin/safe_mysqld&安裝phpapachegzip-dcapache_1.3.11.tar.gz|tarxvf-gzip-dcphp-3.0.11.tar.gz|tarxvf-cdapache_1.3.11./configure-prefix=/export/home/guoj/wwwcd../php-3.0.11./configure-with-apache=/export/home/guoj/apache_1.3.11-with-mysql=/export/home/guoj/mysql-enable-track-varsmakemakeinstallcd../apache_1.3.11./configure--prefix=/export/home/guoj/www--activate-module=src/modules/php3/libphp3.aPmakemakeinstallcd../php-3.0.11cd../php3.ini-distphp3.iniviphp3.ini修改php3.inidoc_root=/export/home/guoj/www/htdocs/extension_dir=/export/home/guoj/php-3.0.11/extension=php3_mysql.dllcpphp3.ini/usr/local/lib/php3.inivi../www/conf/httpd.conf
加上以下幾句:
<Directory"/export/home/guoj/php-3.0.11/">OptionsFollowSymLinksAllowOverrideNone</Directory>../www/bin/apachectlstart

其他方面

PHP 在資料庫方面的豐富支持,也是它迅速走紅的原因之一,它支持下列的資料庫或是數據檔案:
Adabas 、D、 DBA、dBase 、dbm 、filePro 、Informix 、InterBase、mSQL 、Microsoft SQL Server、·MySQL、Solid、Sybase、 Oracle 、PostgreSQL
而在 Internet 上它也支持了相當多的通訊協定 (protocol),包括了與電子郵件相關的 IMAP,POP3;網管系統 SNMP;網路新聞NNTP;帳號共用 NIS;全球信息網 HTTP 及 Apache 伺服器;目錄協定 LDAP 以及其它網路的相關函式
除此之外,用 PHP 寫出來的 Web 後端 CGI 程式,可以很輕易的移植到不同的作業系統上。例如,先以 Linux 架的網站,在系統負荷過高時,可以快速地將整個系統移到 SUN 工作站上,不用重新編譯 CGI 程式。面對快速發展的 Internet,這是長期規劃的最好選擇。
相關語法及概念
php 支持八種原始類型。
四種標量類型:boolean(布爾型) integer(整型) float(浮點型,也作“double”) string(字元串)
兩種複合類型:array(數組)object(對象)
最後是兩種特殊類型:resource(資源)NULL
為了確保代碼的易讀性,本手冊還介紹了一些偽類型:mixed、number、callback
語法(例子中均忽略了PHP代碼邊界符 <?php ?>):
注釋的語法有三種:
//comment這個是單行注釋/*comment*/這個是多行注釋#comment這個是腳本類型注釋,很少用
基本的結構控制語句:
//分支結構(選擇結構)if(condition){//Statement}if(condition){//Statement}else{//Statement}if(condition){//Statement}elseif(condition){//Statement}//多分支結構switch($變數){case'值'://Statementbreak;case'值2'://Statementbreak;default://Statement}//循環結構while(condition){//Statement}do{//Statement}while(condition);for(初始化;判斷;變化){//Statement}//數組遍歷專用循環語句foreach($Arrayas$value){echo$value;}foreach($Arrayas$key=>$value){echo$key;echo$value;}
一個PHP實例:
<html><head><title>Firstprogram</title></head><body>//php中string類型的拼接符和其它大多數採用"+"號運算符不一樣,而是採用"."號運算//在一般語言中用於對象屬性和方法調用的"."運算符,則和C語言的結構體一樣用"=>"<?phpecho"helloworld"."!";?></body></html>
php對面向對象的支持
面向對象編程的概念:
不同的作者之間說法可能不一樣,但是一個OOP語言必須有以下幾方面:
1.抽象數據類型和信息封裝
在PHP中是通過類來完成封裝的:
//在OOP類中,通常採用大雙駝峰命名法,每個單詞的首字母都大寫classSomething{//作用域修飾符:public公共的;private私有的;protected受保護的;//屬性的名稱一般用全小寫private$x=null;//在編程建議中,內部使用的屬性應該給私有修飾符,然後通過方法取值賦值//方法的名稱一般用小駝峰命名法,第一個單詞全小寫,剩下的單詞首字母大寫//因為PHP不會自動為變數使用$this所以必須主動加上$this偽變數來指向操作的對象publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}}
當然你可以按自己的喜好進行定義,但最好保持一種標準,這樣會更有效。數據成員在類中使用"var"聲明來定義,在給數據成員賦值之前,它們是沒有類型的。一個數據成員可以是一個整數,一個數組,一個相關數組(associative array)或者是一個對象。方法在類中被定義成函式形式,在方法中訪問類成員變數時,你應該使用$this->name,否則對一個方法來說,它只能是局部變數
使用new操作符來創建一個對象:
$obj=newSomething;
然後你可以使用成員函式通過:
$obj->setX(5);$see=$obj->getX();echo$see;
在這個例子中,setX成員函式將5賦值給對象的成員變數x(不是類的),然後getX返回它的值5。可以象:$obj->x=6那樣通過類引用方式來存取數據成員,這不是一個很好的OOP習慣。我強烈建議通過方法來存取成員變數。如果你把成員變數看成是不可處理的,並且只通過對象句柄來使用方法,你將是一個好的OOP程式設計師。不幸的是,PHP不支持聲明私有成員變數,所以不良代碼在PHP中也是允許的。繼承在PHP中很容易實現,只要使用extends關鍵字。
classAnotherextendsSomething{private$y;publicfunctionsetY($v){$this->y=$v;}functiongetY(){return$this->y;}}
"Another"類的對象擁有了父類(Something)的全部的數據成員及方法,而且還加上了自己的數據成員和方法。
你可以使用
$obj2=newAnother;$obj2->setY(5);echo$obj2->getY();
PHP只支持單繼承,所以你不能從兩個或兩個以上類派生出新的類來。你可以在派生類中重定義一個方法,如果我們在"Another"類中重定義了getX方法(方法重寫),我們就不能使 用"Something"中的getX方法了。如果你在派生類中聲明了一個與基派同名的數據成員,那么當你處理它時, 它將“隱藏”基類的數據成員。
你可以在你的類中定義構造函式。構造函式是一個與類名同名的方法,當你創建一個類的對象時會被調用,例如:
classSomething{private$x=null;//新版本的構造函式放棄使用類名,而統一使用__construct()publicfunction__construct($x){$this->x=$x;}publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}//析構函式publicfunction__destruct(){}}
所以你可以創建一個對象,通過:
$obj=newSomething(6);
構造函式會自動地把6賦值給數據變數x。構造函式和方法都是普通的PHP函式(”__“兩個下劃線,魔術方法),所以你可以使用預設參數
publicfunction__construct($x="3",$y="5"){}
接著:
$obj=newSomething();//x=3andy=5$obj=newSomething(8);//x=8andy=5$obj=newSomething(8,9);//x=8andy=9
預設參數使用C++的方式,所以你不能忽略Y的值,而給X一個預設參數,參數是從左到右賦值的,如果傳入的參數少於要求的參數時,其作的將使用預設參數。
當一個派生類的對象被創建時,只有它的構造函式被調用,父類的構造函式沒被調用,如果你想調用基類的構造函式,你必須要在派生類的構造函式中用parent::__construct()調用。可以這樣做是在派生類中所有父類的方法都是可用的。
classAnotherextendsSomething{publicfunction__construct(){parent::__construct(5,6);//顯示調用基類構造函式}}
OOP的一個很好的機制是使用抽象類。抽象類是不能實例化,只能提供給派生類一個接口。設計者通常使用抽象類來強迫程式設計師從基類派生,這樣可以確保新的類包含一些期待的功能。在PHP中沒有標準的方法,但是:如果你需要這個特性,可以通過定義基類,並在它的構造函式後加上"die" 的調用,這樣就可以保證基類是不可實例化的,在每一個方法(接口)後面加上"die" 語句,所以,如果一個程式設計師在派生類中沒有覆蓋方法,將引發一個錯誤。而且因為PHP 是無類型的,你可能需要確認一個對象是來自於你的基類的派生類,那么在基類中增加一個方法來實義類的身份(返回某種標識id),並且在你接收到一個對象參數時校驗這個值。當然,如果一個不好的邪惡程式設計師在派生類中覆蓋了這個方法,這種方法就不起作用了,不過一般問題多在懶惰的程式設計師身上,而不是邪惡的程式設計師。
當然,能夠讓基類對程式設計師無法看到是很好的,只要將接口列印出來做他們的工作就可以了。PHP 5 引入了析構函式的概念,這類似於其它面向對象的語言,如 C++。析構函式會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。
重載(與覆蓋不同)在PHP中不支持,因為PHP是弱類型語言。在OOP中,你可以重載一個方法來實現兩個或重多的方法具有相同的名字,但是有不同數量或類型的參數(這要看語言)。PHP 是一種鬆散類型的語言,所以通過類型重載不起作用,然而通過參數的個數不同來重載也不起作用。
有時在OOP中重載構造函式非常好,這樣你可以通過不同的方法創建對象(變數函式)。在PHP中實現它的技巧是:
classMyclass{publicfunctionMyclass(){$name="Myclass".func_num_args();//這個函式返回的是傳過來參數的個數$this->$name();//這裡使用的是一個變數函式,以這個變數的值作為函式的名稱調用}publicfunctionMyclass1($x){//code}publicfunctionMyclass2($x,$y){//code}}
通過在類中的額外的處理,使用這個類對用戶是透明的:
$obj1=newMyclass('1');//將調用Myclass1$obj2=newMyclass('1','2');//將調用Myclass2
有時這個非常好用。
多態
多態是對象的一種能力,它可以在運行時刻根據傳遞的對象參數,決定調用哪一個對象的方法。例如,如果你有一個figure的類,它定義了一個draw的方法。並且派生了circle和rectangle 類,在派生類中你覆蓋了draw方法,你可能還有一個函式,它希望使用一個參數x,並且可以調用$x->draw()。如果你有多態性,調用哪個draw方法就依賴於你傳遞給這個函式的對象類型。
多態性在象PHP這樣的解釋語言(想像一下一個C++編譯器生成這樣的代碼,你應該調用哪一個方法?你也不知道你擁有的對象是什麼類型的,好,這不是重點)是非常容易和自然的。所以PHP當然支持多態性。
classCalc{functionniceDrawing($x){//假設這是Board類的一個方法$x->draw();}}classCircle{publicfunctiondraw(){echo"畫了一個圓";}}classRectangle{publicfunctiondraw(){echo"畫了一個矩形";}}$board=newCalc;$obj=newCircle(3,187);$obj2=newRectangle(4,5);$board->niceDrawing($obj);//將調用Circle的draw方法$board->niceDrawing($obj2);//將調用Rectangle的draw方法
用PHP進行面向對象編程
一些"純化論者(purists)"可能會說PHP不是一個真正的面向對象的語言,這是事實。PHP 是一個混合型語言,你可以使用OOP,也可以使用傳統的過程化編程。然而,對於大型項目,你可能想/需要在PHP 中使用純的OOP去聲明類,而且在你的項目只用對象和類。
隨著項目越來越大,使用OOP可能會有幫助,OOP代碼很容易維護,容易理解和重用。這些就是軟體工程的基礎。在基於web的項目中套用這些概念就成為將來網站成功的關鍵。
高級OOP技術
在看過基本的OOP概念後,我就可以向你展示更高級的技術:
序列化(Serializing)
PHP不支持永久對象,在OOP中永久對象是可以在多個套用的引用中保持狀態和功能的對象,這意味著擁有將對象保存到一個檔案或資料庫中的能力,而且可以在以後裝入對象。這就是所謂的序列化機制。PHP 擁有序列化方法,它可以通過對象進行調用,序列化方法可以返回對象的字元串表示。然而,序列化只保存了對象的成員數據而不包括方法。
在PHP4中,如果你將對象序列化到字元串$s中,然後釋放對象,接著反序列化對象到$obj,你可以繼續使用對象的方法!我不建議這樣去做,因為(a)文檔中沒有保證這種行為在以後的版本中仍然可以使用。(b) 這個可能導致一種誤解,在你把一個序列化後的版本保存到磁碟並退出腳本時。當以後運行這個腳本時,你不能期待著在反序列化一個對象時,對象的方法也會在那裡,因為字元串表示根本就不包括方法。
總而言之,PHP 進行序列化對於保存對象的成員變數非常有用。(你也可以將相關數組和數組序列化到一個檔案中)。
例子 :
$obj=newClassfoo();$str=serialize($obj);//保存$str到磁碟上$obj2=unserialize($str);//幾個月以後//從磁碟中裝入str
你恢復了成員數據,但是不包括方法(根據文檔所說)。這導致了只能通過類似於使用$obj2->x來存取成員變數(你沒有別的方法!)的唯一辦法,所以不要在家裡試它。
有一些辦法可以解決這個問題,我把它留著,因為對這篇簡潔的文章來說,他們太不好。我會很高興地歡迎在PHP的後續版本中有全序列化的特性。
使用類進行數據存儲PHP和OOP一件非常好的事情就是,你可以很容易地定義一個類來操作某件事情,並且無論何時你想用的時候都可以調用相應的類。假設你有一個HTML表單,用戶可以通過選擇產品ID號來選擇一個產品。在資料庫中有產品的信息,你想把產品顯示出來,顯示它的價格等等。你擁有不同類型的產品,並且同一個動作可能對不同的產品具有不同的意思。例如,顯示一個聲音可能意味著播放它,但是對於其它種類的產品可能意味著顯示一個存在資料庫中的圖片。你可以使用OOP或PHP來減少編碼並提高質量:
定義一個產品的類,定義它應該有的方法(例如:顯示),然後定義對每一種類型的產品的類,從產品類派後出來(SoundItem類,ViewableItem類,等等),覆蓋在產品類中的方法,使它們按你的想法動作。
根據資料庫中每一種產品的類型(type)欄位給類命名,一個典型的產品表可能有(id,type,price,description,等等欄位)...然後在處理腳本中,你可以從資料庫中取出type值,然後實例化一個名為type的對象:
$obj=new$type();$obj->action();
這是PHP的一個非常好的特性,你可以不用考慮對象的類型,調用$obj的顯示方法或其它的方法。使用這個技術,你不需要修改腳本去增加一個新類型的對象,只是增加一個處理它的類。
這個功能很強大,只要定義方法,而不去考慮所有對象的類型,在不同的類中按不同的方法實現它們,然後在主腳本中對任意對象使用它們,沒有if...else,也不需要兩個程式設計師,只有高興。
你同意編程是容易的,維護是便宜的,可重用是真的嗎?
如果你管理一組程式設計師,分配工作就是很簡單的了,每個人可能負責一個類型的對象和處理它的類。
可以通過這個技術實現國際化,根據用戶所選的語言欄位套用相應的類就可以了,等等。
拷貝和克隆
當你創建一個$obj的對象時,你可以通過$obj2=$obj來拷貝對象,新的對象是$obj的一個拷貝(不是一個引用),所以它具有$obj在當時的狀態。有時候,你不想這樣,你只是想生成一個象obj類一樣的一個新的對象,可以通過使用new語句來調用類的構造函式。在PHP中也可以通過序列化,和一個基類來實現,但所有的其它類都要從基類派生出來。
進入危險區域
當你序列化一個對象,你會得到某種格式的字元串,如果你感興趣,你可以調究它,其中,字元串中有類的名字(太好了!),你可以把它取出來,象:
$herring=serialize($obj);$vec=explode(':',$herring);//以:為標識符把字元串拆分成一個數組$nam=str_replace("\",'',$vec[2]);
所以假設你創建了一個"Universe"的類,並且強制所有的類都必須從universe擴展,你可以在universe 中定義一個clone的方法,如下:
classUniverse{//在新的PHP版本中克隆(__clone())是一個魔術方法,不要和這個方法搞混了functionclone(){$herring=serialize($this);$vec=explode(':',$herring);$nam=str_replace("\"",'',$vec[2]);$ret=new$nam;return$ret;}}//然後$obj=newSomething();//從Universe擴展$other=$obj->clone();
你所得到的是一個新的Something類的對象,它同使用new方法,調用構造函式創建出的對象一樣。我不知道這個對你是否有用,但是Universe類可以知道派生類的名字是一個好的經驗。想像是唯一的限制。
模板引擎
  • Smarty:Smarty的特點是將模板編譯成PHP腳本,然後執行這些腳本。很快,非常方便。
  • Heyes Template Class:一個非常容易使用,但功能強大並且快速的模板引擎,它幫助你把頁面布局和設計從代碼中分離。
  • FastTemplate:一個簡單的變數插值模板類,它分析你的模板,把變數的值從HTML代碼中分離處理。
  • ShellPage:一個簡單易用的類,可以讓你的整個網站布局基於模板檔案,修改模板就能改變整個站點。
  • STP Simple Template Parser:一個簡單、輕量級並且易於使用的模板分析類。它可以從多個模板中組裝一個頁面,把結果頁面輸出到瀏覽器或者檔案系統。
  • OO Template Class:一個你可以用在自己程式中的面向對象的模板類。
  • SimpleTemplate:一個可以創建和結構化網站的模板引擎。它可以解析和編譯模板。
  • bTemplate:短小但是快速的模板類,允許你把PHP邏輯代碼從HTML修飾代碼中分離。
  • Savant:一個強大且輕量級的PEAR兼容模板系統。它是非編譯型的,使用PHP語言本身做為它的模板語言。
  • ETS - easy template system:可以使用完全相同數據重組模板的模板系統。
  • EasyTemplatePHP:適用於你的站點的一個簡單但是強大的模板系統。
  • vlibTemplate:一個快速、全能的模板系統,它包含一個快取和調試類。
  • AvanTemplate:多位元組安全的模板引擎,占用很少系統資源。它支持變數替換,內容塊可以設定顯示或隱藏
  • Grafx Software’s Fast Template:一個修改版本的Fast Template系統,它包括快取功能,調試控制台以及沉默去除為賦值塊。
  • TemplatePower:一個快速、簡單、功能強大的模板類。主要功能有嵌套的動態塊支持,塊/檔案包含支持以及顯示/隱藏未賦值的變數。
  • TagTemplate:這個庫的功能被設計來使用模板檔案,同時允許你從HTML檔案檢索信息。
  • htmltmpl: templating engine:一個適用於Python和PHP的模板引擎。它面向希望在項目中分離代碼和設計的web套用開發人員。
  • PHP Class for Parsing Dreamweaver templates:一個分析Dreamweaver模板的簡單類,被用於Gallery 2 和WordPress的自定義模組中。
  • MiniTemplator (Template Engine):針對HTML檔案的一個緊湊型模板引擎。對於模板變數和塊定義它具有簡單的語法。其中塊可以嵌套。
  • Layout Solution:簡化網站開發和維護。它擁有常用的變數和頁面元素使你不需要重複做頁面布局工作。
  • Cached Fast Template:它已經納入 FastTemplate ,允許你快取模板檔案,甚至可以在分離的塊內容上快取不同的規格。
  • TinyButStrong:一個支持MySQL,Odbc,Sql-Server和ADODB的模板引擎。它包含7個方法和兩個屬性。
  • Brian Lozier’s php based template engine:只有2K大小,非常快並且是面向對象設計
  • WACT:一個從設計中分離代碼的模板引擎
  • PHPTAL:一個PHP下面的XML/XHTML模板庫。
  • Rong_View_Wudimei:Wudimei開發的國產框架Rong Framework的模板引擎,它類似於smarty,優點是速度快,缺點是模板標籤較少,不過夠用了。
框架介紹thinkphp
ThinkPHP是一個免費開源的,快速、簡單的面向對象的 輕量級PHP開發框架 ,創立於2006年初,遵循Apache2開源協定發布,是為了敏捷WEB套用開發和簡化企業套用開發而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。並且擁有眾多的原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷最佳化和改進,已經成長為國內最領先和最具影響力的WEB套用開發框架,眾多的典型案例確保可以穩定用於商業以及門戶級的開發。
PHP認證級別
PHP課程由初級(IFE)、中級(IPE)和高級(IAE)三個部分。
  • IFE即Index Front-end Engineer的縮寫,指數前端工程師的意思。
  • IPE即 Index PHP Engineer 的縮寫,意思是指數PHP工程師。
  • IAE即 Index architecture/advanced engineer 的縮寫,意思是:指數高級/架構工程師。
PHP安全
PHP其實不過是Web伺服器的一個模組功能,所以首先要保證Web伺服器的安全。當然Web伺服器要安全又必須是先保證系統安全,這樣就扯遠了,無窮無盡。常見的web安全漏洞有:注入攻擊,跨站攻擊,伺服器自身漏洞等,對應的詳細解釋,詳見:擴展閱讀中的《WEB安全性-2010_OWASP_TOP10》,這裡有很詳盡的解釋。
PHP的優點學習過程和方法
PHP的語法類似於C,Perl,ASP或者JSP。對於那些對上述之一的語言較熟悉的人來說,PHP太簡單了。相反的,如果你對PHP了解較多,那么你對於其他幾種語言的學習都很簡單了。你只需要很短的時間內將PHP的核心語言特點全部掌握,你可能已經非常了解HTML,甚至你已經知道怎樣用編輯設計軟體或者手工來製作好看的WEB站點。由於PHP代碼能夠無障礙的添加進你的站點,在你設計和維護站點的同時,你可以很輕鬆的加入PHP使得你的站點更加具有動態特性。
資料庫連線
PHP可以編譯成具有與許多資料庫相連線的函式。PHP與MySQL是絕佳的組合,如果再加上Apache伺服器,就是相當完美的了。你還可以自己編寫外圍的函式取間接存取資料庫。通過這樣的途徑當你更換使用的資料庫時,可以輕鬆的更改編碼以適應這樣的變化。PHPLIB就是最常用的可以提供一般事務需要的一系列基庫。
可擴展性
就像前面說的那樣,PHP已經進入了一個高速發展的時期。對於一個非程式設計師來說為PHP擴展附加功能可能會比較難,但是對於一個PHP程式設計師來說並不困難。
PHP可伸縮性
傳統上網頁的互動作用是通過CGI來實現的。CGI程式的伸縮性不很理想,因為它為每一個正在運行的CGI程式開一個獨立進程。解決方法就是將經常用來編寫CGI程式的語言的解釋器編譯進你的web伺服器(比如mod_perl,JSP)。PHP就可以以這種方式安裝,雖然很少有人願意這樣以CGI方式安裝它。內嵌的PHP可以具有更高的可伸縮性。
記事本保存php檔案注意事項記事本保存php檔案注意事項
PHP免費安裝
PHP原始碼包安裝版:這個版本適合已經有自己獨立的網站域名、網站空間的專業網站建設用戶。使用方法依然其為簡單,只需三步:
第一、到官方網站:下載 PHP原始碼包安裝版最新版本,解壓下載檔案,將其中的全部內容上傳到你的支持PHP的網站空間
第二、改更檔案屬性,請將根目錄下以PHP為後綴名的檔案和”/include/domain.php”和 “/attachments” 和 “/data”資料夾以及資料夾下所有的檔案屬性改成“可讀”、“可寫”、“可執行”,通常是“755”。
第三、打開你的網站根目錄,系統會自動運行setup安裝程式,按提示點下一步操作即可。
友情提示:當你下載我們的軟體並看到這份說明時,則說明你一定是對企業網站建設有一定的需求或者你是一個網站建設技術學習者。
檔案格式
  1. 對於只含有 php 代碼的檔案,我們將在檔案結尾處忽略掉 "?>"。這是為了防止多餘的空格或者其它字元影響到代碼。
例如:
$foo = 'foo';
  1. 縮進應該能夠反映出代碼的邏輯結果,儘量使用四個空格,禁止使用制表符TAB,因為這樣能夠保證有跨客戶端編程器軟體的靈活性。
例如:
if(1==$x){$indented_code=1;if(1==$new_line){$more_indented_code=1;}}
  1. 變數賦值建議保持相等間距和排列。
例如:
$variable='demo';$var='demo2';
  1. 每行代碼長度應控制在80個字元以內,最長不超過120個字元。因為 linux 讀入檔案一般以80列為單位,就是說如果一行代碼超過80個字元,那么系統將為此付出額外操作指令。這個雖然看起來是小問題,但是對於追求完美的程式設計師來說也是值得注意並遵守的規範。
  2. 每行結尾不允許有多餘的空格。
Php檔案記事本編輯亂碼問題
一般情況下,記事本編輯器在對檔案進行完編輯並保存之時,其默認編碼為ANSI,中文。然則更多的時候,php在語言環境設定時語言多數為utf-8,直接保存並用於apache等http-server解析後就會出現亂碼。
為此,應該注意在用記事本編輯完後可將檔案用“另外儲存為”的方式對檔案進行保存,並將“檔案類型”選擇“所有檔案”,編碼與檔案指定語言編碼一致即可。
算數運算符
PHP 的運算符包括算術運算符、賦值運算符、比較運算符和邏輯運算符。
算數運算符:
加,減,乘,除,取模(取余)
+、-、*、/、%
賦值運算符:(以下解釋在許多書中有所不同)
賦值,加賦值,減賦值、乘賦值、除賦值,連字賦值
=、+=、-=、*=、/=、.=
位運算符:
位與、位或、位亦或、位非、左移、右移
&、|、^、~、<<、>>
比較運算符:
等於、全等於、不等於、不全等於、大於、小於、大於等於、小於等於
==、===、!=(<>)、!==、>、<、>=、<=
邏輯運算符:
邏輯與、邏輯或、邏輯非、邏輯亦或
&&、||、!、xor
字元串運算符:
. 連線兩個字元串

相關詞條

熱門詞條

聯絡我們