當前位置:首頁 » 編程語言 » phph5

phph5

發布時間: 2022-02-11 09:02:53

1. php5怎麼樣

2004年7月,PHP5正式版本的發布,標志著一個全新的PHP時代的到來。它的核心是第二代Zend引擎,並引入了對全新的PECL模塊的支持。PHP5的最大特點是引入了面向對象的全部機制,並且保留了向下的兼容性。程序員不必再編寫缺乏功能性的類,並且能夠以多種方法實現類的保護。另外,在對象的集成等方面也不再存在問題。使用PHP5引進了類型提示和異常處理機制,能更有效的處理和避免錯誤的發生。
在不斷更新的同時,PHP5依然保留對舊有的PHP4程序可以運行於PHP5的平台
[PHP5]

PHP5
上而不會出現較大問題。隨著Mysql資料庫的發展,PHP5還綁定了新的MySQLi擴展模塊,它提供了一些更加有效的方法和實用工具用於處理資料庫操作。這些方法大都以面向對象的方式實現,同時也極大地提高了基於資料庫的Web項目的執行速度。
另外,PHP5中還改進了創建動態圖片的功能,目前能夠支持多種圖片格式(如PNG、GIF、TTIF、JPGE等)。PHP5以及內置了對GD2庫的支持,因此安裝GD2庫(主要指UNIX系統中)也不再是件難事,這使得處理圖像十分簡單和高效。
大多數Web程序開發者依然將XML作為一個徹底的簡單資料庫使用。PHP5中也採用了一系列簡單易用、功能強大的方法處理XML文檔。
今天,已經有包括雅虎和亞馬遜等在內的數百萬網站,以及眾多的開發人員和編程愛好者正在使用PHP。從最初的PHP/FI到現在的PHP5,PHP的發展是及其迅猛的,其未來的發展前景也必定令人矚目。

2. 什麼是PHP5

1、PHP語言簡介
PHP是「PHP:Hypertext Preprocessor」的縮寫,即「超文本預處理器」。PHP是一種功能強大,並且簡便易用的腳本語言。
1.1 PHP的發展歷史
PHP是一種簡單、輕便的伺服器端腳本語言。PHP最初是作為一個快速、實用的工具包出現的。1994年,為了在自己的網站上增加一個小巧而實用的訪客追蹤系統,Rasmus Lerdorf編寫了PHP的雛形程序。這是一個用Perl封裝的簡單工具。由於使用效果並不理想,Rasmus又用C語言重寫了這個工具。
後來,更多的人注意到這個輕巧而簡便的程序,並且要求增加更多的功能。Rasmus決定發布一個完整的版本,將其命名為Personal Home Page Tools。後來,Rasmus又發布了一個名為FI的可以做SQL查詢的工具。
1.1.1 PHP2的發展
1996年Rasmus發布了PHP/FI2.0,這是一個基本完善的PHP程序包。它不僅可以訪問資料庫,而且可以嵌入HTML頁面。此時,PHP/FI2.0以及吸引了大量的程序開發人員。在眾多程序員之中,也包括了Zeev Suraski和Andi Gutmans,他們就是後來PHP3的始作者。由於不滿足於PHP/FI在大型項目中的表現,Zeev和Andi作了重大的改進。
1.1.2 PHP3的發展
1998年末,PHP3的第一個官方正式版本發行,其特色是具有更好的執行效果以及更清晰的結構。除此之外,PHP3的強大的功能還在於它的可擴展性。除了給最終用戶提供資料庫、協議和API的基礎結構,它的可擴展性吸引了大量的開發人員加入並提交新的模塊。
這個全新的語言伴隨著一個新的名稱發布。這個名稱更具廣泛意義,而不僅局限於「個人主頁工具」的概念。它被命名為簡單的縮寫「PHP」。這是一種遞歸的縮寫,它的全稱是——PHP:Hypertext Preprocessor。
不久,Zeev Suraski和Andi Gutmans投入到了全新的PHP的開發之中。設計目標是增強程序運行性能和PHP自身代碼的模塊性。
1.1.3 PHP4的發展
新的PHP核心被成為「Zend」(以Zeev和Andi的名字命名)引擎,於2000年5月隨著新版PHP4.0發布。PHP4的性能較PHP3有著顯著的提高。相同的腳本在PHP4中運行,最高可以有近10倍的性能提升。並且Zend提供了的腳本優化器,可以把源程序轉為二進制編譯代碼,提高性能的同時,也保護了程序源碼不被暴露。
在PHP4中增加了對各種Web伺服器(如Apache、IIS/PWS及OmniHTTPd等)的支持。此外,PHP4還增加了一些新的語言特性,如豐富的數組操作函數、完整的會話機制、對輸出緩存的支持等。PHP4也對一些跨平台的技術提供了擴展支持,如對Adobe PDF、SWF、Java、Microsoft.NET等技術的支持。
PHP4還增加了對類於對象的支持。盡管PHP4在這方面並不完善,但還是大大改善了對面向對象程序設計的支持。PHP4中的Pear庫(PHP Extension and Application Repository)就是面向對象的應用與實踐的最好例證。
1.1.4 PHP5的發展
盡管PHP4的發展是如此迅猛,但較之於其他流行的開發語言還是缺乏一些關鍵的功能特性,比如,PHP4中的面向對象功能並不完善,也無法實現異常(Exception)的捕捉與處理。因此在一些特殊問題的處理上還是捉襟見肘的。
2004年7月,PHP5正式版本的發布,標志著一個全新的PHP時代的到來。它的核心是第二代Zend引擎,並引入了對全新的PECL模塊的支持。PHP5的最大特點是引入了面向對象的全部機制,並且保留了向下的兼容性。程序員不必再編寫缺乏功能性的類,並且能夠以多種方法實現類的保護。另外,在對象的集成等方面也不再存在問題。使用PHP5引進了類型提示和異常處理機制,能更有效的處理和避免錯誤的發生。
在不斷更新的同時,PHP5依然保留對舊有的PHP4程序可以運行於PHP5的平台上而不會出現較大問題。隨著MySQL資料庫的發展,PHP5還綁定了新的MySQLi擴展模塊,它提供了一些更加有效的方法和實用工具用於處理資料庫操作。這些方法大都以面向對象的方式實現,同時也極大地提高了基於資料庫的Web項目的執行速度。
另外,PHP5中還改進了創建動態圖片的功能,目前能夠支持多種圖片格式(如PNG、GIF、TTIF、JPGE等)。PHP5以及內置了對GD2庫的支持,因此安裝GD2庫(主要指UNIX系統中)也不再是件難事,這使得處理圖像十分簡單和高效。
大多數Web程序開發者依然將XML作為一個徹底的簡單資料庫使用。PHP5中也採用了一系列簡單易用、功能強大的方法處理XML文檔。

3. 如何搭建php5.5環境

在進行php開發之前需要搭建php和apache結合的開發環境。
具體步驟如下:

一、下載安裝包

1.1、php5.5.6


推薦 V11 x64,也就是64bit的。

1.2、apache2.4


同樣是推薦 V11,64位的。

1.3、V11

V11是微軟的一個組件,如果不安裝的話會提示 msvcr110.dll丟失。

請下載64bit的,下載後直接安裝V11應用程序。

二、配置php

2.1 解壓

解壓php包到D: oolphp-5.5.32-Win32-VC11-x64目錄

2.2 設置PHP_HOME和PATH

在環境變數中設置:
PHP_HOME:D: oolphp-5.5.32-Win32-VC11-x64
PATH中添加:%PHP_HOME%;%PHP_HOME%/ext;

2.3 使用php -v查看版本號

到此,apache和php的環境已經搭建完成了。

4. php5到底有什麼用

可以為學習編程打個基礎

5. PHP5.5 和PHP5.6的區別

PHP5.5 和PHP5.6的區別
摘要:在一個基於Vagrant的本地環境中,可能是某個錯誤的原因,導致HHVM測試結果很差;在HHVM夥伴們協助下,該原因仍在研究中!然而,在DigitalOcean的一個4GB虛擬機中,HHVM甚至蓋過了最新版的PHP-NG的風頭!
結論:它們反映出HHVM的功效更佳(在JIT熱啟動後),雖然出於某些原因,我們不能在所有裝備中獲取這些結果。
如果你記得我們在幾個月前寫過一篇文章,那時WordPress 3.9表明是完全支持HHVM的,當時是那麼令我們歡欣鼓舞。最初的基準測試結果顯示,HHVM要比驅動著當前所有PHP構建的Zend引擎高級得多。後來,問題就出來了:
HHVM只能以單個用戶運行,這意味著(在共享環境中)安全性差了
HHVM在崩潰後不會自動重啟,而不幸的是,它至今仍然經常發生
HHVM在啟動時使用大量內存,雖然,它和同規模的PHP-FPM比較,單個請求的內存使用量更低
很顯然,你不得不根據你的(或者更確切地說是你的站點)的需求採取折中方案,然而這值得嗎?切換到HHVM後,你期望獲得多少性能改善呢?
在Kinsta,我們真的想要測試所有新技術,並通常會優化這一切來為我們的客戶提供最佳的環境。今天,我最終花了點時間來配置測試環境並進行了一些測試來對比兩個不同的構建,一個是全新出爐的WordPress安裝,另外一個則添加了大量內容的WooCommerce!為了計量腳本的運行時間,我只是簡單地添加了
<?php timer_stop(1); ?>
這一行到footer.php的/body標記前。
這里是配置環境的詳情:
DigitalOcean 4GB 雨滴容器 (2 CPU核心, 4GB RAM)
Ubuntu 14.04, MariaDB10
測試站點: 已導入演示內容的Munditia主題,WooCommerce 2.1.12 & WordPress 3.9.1
PHP 5.5.9, PHP 5.5.15, PHP 5.6.0 RC2, PHP-NG (20140718-git-6cc487d)和HHVM 3.2.0 (版本是PHP 5.6.99-hhvm)
沒有進一步大費周章,這些就是我的測試結果,數值越低越好,以秒為單位:
DigitalOcean 4GB 雨滴容器
單位是秒,運行10次,越低越好
看起來似乎PHP-NG在它首次運行後就獲得了峰值性能!HHVM需要更多幾次重載,但是它們的性能貌似差不多!我等不及PHP-NG合並到開發主幹了!:)
一分鍾命中數,越高越好。
PHP 5.5.15禁用OpCache
執行: 236 hits
可用性: 100.00 %
消耗時間: 59.03 secs
傳輸的數據: 2.40 MB
回應時間: 2.47 secs
執行率: 4.00 trans/sec
吞吐量: 0.04 MB/sec
並發數: 9.87
成功的執行: 236
失敗的執行: 0
最長執行: 4.44
最短執行: 0.48
PHP 5.5.15啟用OpCache
執行: 441 hits
可用性: 100.00 %
消耗時間: 59.55 secs
傳輸的數據: 4.48 MB
回應時間: 1.34 secs
執行率: 7.41 trans/sec
吞吐量: 0.08 MB/sec
並發數: 9.91
成功的執行: 441
失敗的執行: 0
最長執行: 2.19
最短執行: 0.64
PHP 5.6 RC2禁用OpCache
執行: 207 hits
可用性: 100.00 %
消耗時間: 59.87 secs
傳輸的數據: 2.10 MB
回應時間: 2.80 secs
執行率: 3.46 trans/sec
吞吐量: 0.04 MB/sec
並發數: 9.68
成功的執行: 207
失敗的執行: 0
最長執行: 3.65
最短執行: 0.54
PHP 5.6 RC2啟用OpCache
執行: 412 hits
可用性: 100.00 %
消耗時間: 59.03 secs
傳輸的數據: 4.18 MB
回應時間: 1.42 secs
執行率: 6.98 trans/sec
吞吐量: 0.07 MB/sec
並發數: 9.88
成功的執行: 412
失敗的執行: 0
最長執行: 1.93
最短執行: 0.34
HHVM 3.2.0(版本是PHP 5.6.99-hhvm)
執行: 955 hits
可用性: 100.00 %
消耗時間: 59.69 secs
傳輸的數據: 9.18 MB
回應時間: 0.62 secs
執行率: 16.00 trans/sec
吞吐量: 0.15 MB/sec
並發數: 9.94
成功的執行: 955
失敗的執行: 0
最長執行: 0.85
最短執行: 0.23
PHP-NG啟用OpCache(構建: Jul 29 2014)
執行: 849 hits
可用性: 100.00 %
消耗時間: 59.88 secs
傳輸的數據: 8.63 MB
回應時間: 0.70 secs
執行率: 14.18 trans/sec
吞吐量: 0.14 MB/sec
並發數: 9.94
成功的執行: 849
失敗的執行: 0
最長執行: 1.06
最短執行: 0.13

6. 什麼是php5.5.0

PHP 是一種新型的 CGI 程序編寫語言,易學易用,運行速度快,可以方便快捷地編寫出功能強大,運行速度快,並可同時運行於 Windows、Unix、Linux 平台的Web後台程序,內置了對文件上傳、密碼認證、Cookies 操作、郵件收發、動態 GIF 生成等功能,PHP 直接為很多資料庫提供原本的連接,包括Oracle、Sybase、Postgres、Mysql、Informix、Dbase、Solid、Access 等,完全支持ODBC介面,用戶更換平台時,無需變換 PHP 代碼,可即拿即用。5.50為對應的軟體版本編號

7. PHP的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 ame;//參考定義命名空間小節classMyClass{}functionmyfunction(){}constMYCONST=1;$a=newMyClass;$c=newmy ameMyClass;//參考全局空間小節$a=strlen('hi');//參考使用命名空間:後備全局函數/常量小節$d=namespaceMYCONST;//參考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/moles/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 代碼的常量名的開發者需要注意的。

8. php5.3.5安裝

IIS7+PHP_5.3.51. 將下載回來的php_5.3.5解壓到 C:\php目錄(也可以放在其他地方,但是後面應該做相應修改) 2. 將php.ini-development改名為php.ini3. 修改php.ini 查找data.timezone 修改為date.timezone = 「Asia/Shanghai」(這里必須改,不然會出警告) 找到Windows Extensions開啟 所需模塊,如:php_curl.dll php_mysql.dll php_mysqli.dll php_xmlrpc.dll php_curl.dll 只要去掉前面的 分號 保存就可以了4. 添加<模塊映射>這里的路徑按你的實際情況填寫.5. 在網站根目錄新建一個phpinfo.php的文本文件 內容為:<?php
phpinfo();
?>6. 測試,打開瀏覽器看結果:localhost/phpinfo.php,如果能看到類似下面的頁面就說明你成功了:好了,到現在 已經可以成功的運行PHP程序了.

9. php5.5 php5.6 哪個好

看你的需要。語言更新知識增加一些新的功能,如果在你的開發過程中,沒需要,並不建議使用,因為新版本可能還不穩定,一般5.3夠用,如果需要支持一些新的特性,建議用心出的版本

10. php4與php5區別具體有哪些

新的對象模式

PHP5 中的對象已經進行了較系統、較全面的調整,現在的樣子可能看起來會有些類似於 Java。本小節著重講述 PHP5 中新的對象模式,並舉了一些較簡易的例子來說明。就讓本節成為你的 PHP5 之旅的一個新起點吧。:)

* 構造函數和析構函數
* 對象的引用
* 對象的克隆
* 對象中的私有、公共及受保護模式
* 介面 (Interfaces)
* 抽象類
* __call
* __set 和 __get
* 靜態成員

構造函數和析構函數

在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,並且在 PHP4 中沒有析構函數的概念。
在 PHP5 中,構造函數被統一命名為 __construct,並且引入了析構函數的概念,被統一命名為 __destruct。

例一:構造函數和析構函數

<?php
class foo {
var $x;
function __construct($x) {
$this->x = $x;
}
function display() {
print($this->x);
}
function __destruct() {
print("bye bye");
}
}
$o1 = new foo(4);
$o1->display();
?>
在上面的例子中,當你終止調用 foo 類的時候,其析構函數將會被調用,上例中會輸出 「bye bye」。

對象的引用

眾所周知,在PHP4 中,傳遞變數給一個函數或方法,實際是把這個變數做了一次復制,也就意味著你傳給函數或方法的是這個變數的一個副本,除非你使用了引用符號 「&」 來聲明是要做一個引用,而不是一個 Copy。在 PHP5 中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。

例二:對象的引用

<?php
class foo {
var $x;
function setX($x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print("Oh my god!");
?>

對象的克隆

如上所述,當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎麼辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。

例三:對象的克隆
<?php
class foo {
var $x;
function setX($x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1->__clone();
$o1->setX(5); if($o1->getX() != $o2->getX()) print("Copies are independant");
?>
對象克隆的方法在其它很多應用程序語言中都是存在的,所以你不必擔心它的穩定性。:)

對象中的私有、公共及保護模式

PHP4 中,一個對象的所有方法和變數都是公共的,這意味著你可以在一個對象的外部操作其中的任意一個變數和方法。PHP5 引入了三種新的用來控制這種存取許可權的模式,它們是:公共的(Public)、受保護的(Protected)及私有的(Private)。

公共模式(Public):允許在對象外部進行操作控制。
私有模式(Private):只允許本對象內的方法對其進行操作控制。
受保護模式(Protected):允許本對象及其父對象對其進行操作控制。

例四: 對象中的私有、公共及受保護模式

<?php
class foo {
private $x;
public function public_foo() {
print("I'm public");
}
protected function protected_foo() {
$this->private_foo(); //Ok because we are in the same class we can call private methods
print("I'm protected");
}
private function private_foo() {
$this->x = 3;
print("I'm private");
}
}
class foo2 extends foo {
public function display() {
$this->protected_foo();
$this->public_foo();
// $this->private_foo(); // Invalid! the function is private in the base class
}
} $x = new foo();
$x->public_foo();
//$x->protected_foo(); //Invalid cannot call protected methods outside the class and derived classes
//$x->private_foo(); //Invalid private methods can only be used inside the class $x2 = new foo2();
$x2->display();
?>
提示:對象中的變數總是以私有形式存在的,直接操作一個對象中的變數不是一個好的面向對象編程的習慣,更好的辦法是把你想要的變數交給一個對象的方法去處理。

介面 (Interfaces)

眾所周知,PHP4 中的對象支持繼承,要使一個對象成為另一個對象的派生類,你需要使用類似 「class foo extends parent」 的代碼來控制。 PHP4 和 PHP5 中,一個對象都僅能繼承一次,多重繼承是不被支持的。不過,在 PHP5 中產生了一個新的名詞:介面,介面是一個沒有具體處理代碼的特殊對象,它僅僅定義了一些方法的名稱及參數,此後的對象就可以方便的使用 'implement' 關鍵字把需要的介面整合起來,然後再加入具體的執行代碼。

例五:介面

<?php
interface displayable {
function display();
}
interface printable {
function doprint();
}

class foo implements displayable,printable {
function display() {
// code
} function doprint() {
// code
}
}
?>
這對提高代碼的可讀性及通俗性有很大的幫助,通過上面的例子可以看到,對象 foo 包含了 displayable 和 printable 兩個介面,這時我們就可以清楚的知道,對象 foo 一定會有一個 display() 方法和一個 print() 方法,只需要去了解介面部分,你就可以輕易的操作該對象而不必去關心對象的內部是如何運作的。

抽象類

抽象類不能被實例化。
抽象類與其它類一樣,允許定義變數及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。

例六:抽象類

<?php
abstract class foo {
protected $x;
abstract function display();
function setX($x) {
$this->x = $x;
}
}
class foo2 extends foo {
function display() {
// Code
}
}
?>

__call

PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。

例七:__call

<?php
class foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!");
}
} $x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>
這個特殊的方法可以被用來實現「過載(overloading)」的動作,這樣你就可以檢查你的參數並且通過調用一個私有的方法來傳遞參數。

例八:使用 __call 實現「過載」動作

<?php
class Magic {
function __call($name,$arguments) {
if($name=='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
} private function foo_for_int($x) {
print("oh an int!");
} private function foo_for_string($x) {
print("oh a string!");
}
} $x = new Magic();
$x->foo(3);
$x->foo("3");
?>

__set 和 __get

這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變數和方法。

例九: __set 和 __get

<?php
class foo {
function __set($name,$val) {
print("Hello, you tried to put $val in $name");
}
function __get($name) {
print("Hey you asked for $name");
}
}
$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>

類型指示

在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的實例。

例十:類型指示

<?php
class foo {
// code ...
}
class bar {
public function process_a_foo(foo $foo) {
// Some code
}
}
$b = new bar();
$f = new foo();
$b->process_a_foo($f);
?>
可以看出,我們可以顯性的在參數前指明一個對象的名稱,PHP5 會識別出這個參數將會要是一個對象實例。

靜態成員

靜態成員和靜態方法在面象對象編程的術語中被稱作 「對象方法(class methods)」 和 「對象變數(class variables)」。
「對象方法」 在一個對象沒有實例化前允許被調用。同樣,「對象變數」 在一個對象沒有實例化前可以被獨立操作控制(不需要用一個對象的方法來控制)。

例十一:對象方法和對象變數

<?php
class calculator {
static public $pi = 3.14151692;
static public function add($x,$y) {
return $x + $y;
}
}
$s = calculator::$pi;
$result = calculator::add(3,7);
print("$result");
?>

異常處理

異常處理是公認的處理程序錯誤的理想方法,在 Java 及 C++ 中都有這個概念,我們欣喜的看到,在 PHP5 已經加入了這方面的應用。你可以嘗試使用 「try」 和 「catch」 來控製程序的錯誤。

例十二:異常處理

<?php
class foo {
function divide($x,$y) {
if($y==0) throw new Exception("cannot divide by zero");
return $x/$y;
}
}
$x = new foo();
try {
$x->divide(3,0);
} catch (Exception $e) {
echo $e->getMessage();
echo "n
n";
// Some catastrophic measure here
}
?>
上例中,我們使用了 「try」 來執行花括弧中的語句,當有錯誤發生的時候,代碼會把錯誤交給 「catch」 子句來處理,在 「catch」 子句中,你需要指明要把錯誤交給某個對象處理,這樣做可以使代碼結構看起來更清晰,因為現在我們可以把所有的錯誤信息交給一個對象來處理。

自定義錯誤處理

你可以很方便的用自定義的處理錯誤的代碼來控制你的程序中的意外。你僅僅需要從異常類中派生出一個自己的錯誤控制類,在你自己的錯誤控制類中,你需要有一個構造函數和一個 getMessage 方法,以下是一個例子。

例十三:自定義錯誤處理

<?php
class WeirdProblem extends Exception {
private $data;
function WeirdProblem($data) {
parent::exception();
$this->data = $data;
}
function getMessage() {
return $this->data . " caused a weird exception!";
}
}
?>
現在我們可以使用 「throw new WeirdProblem($foo)」 來拋出一個錯誤句柄,如果錯誤在 「try」 的代碼塊中發生,PHP5 會自動把錯誤交給 「catch」 部分來處理。

名稱空間

名稱空間對類的分組或函數分組很有用。它可以把一些相關的類或函數給組合到一起,方便以後調用。

例十四:名稱空間

<?php
namespace Math {
class Complex {
//...code...
function __construct() {
print("hey");
}
}
} $m = new Math::Complex();
?>
注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那麼你就可以把他們分別放到不同的名稱空間中去(但介面是要相同的)。

熱點內容
xpftp外網 發布:2025-05-17 23:58:11 瀏覽:384
如何評價一個伺服器的性能 發布:2025-05-17 23:40:53 瀏覽:270
淘寶客適合什麼伺服器 發布:2025-05-17 23:39:26 瀏覽:612
python循環文件 發布:2025-05-17 23:39:22 瀏覽:828
androidstudio更新 發布:2025-05-17 23:38:22 瀏覽:643
java項目面試 發布:2025-05-17 23:30:53 瀏覽:780
若主存儲器按位元組編址 發布:2025-05-17 23:30:46 瀏覽:24
kotlinandroid 發布:2025-05-17 23:19:09 瀏覽:974
雲編程英語 發布:2025-05-17 23:18:34 瀏覽:623
androidstudio導入類 發布:2025-05-17 23:15:36 瀏覽:237