PHP 類與對象
基本概念
面向對象編程(Object Oriented Programming, OOP, 面向對象程序設計)是一種計算機編程架構。OOP 的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。OOP 達到了軟件工程的三個目標:重用性、靈活性和擴展性。
PHP 在 4.0 版本之后完善了對 OOP 的支持了。對於小型的應用,使用傳統的過程化編程可能更簡單也更有效率。然而對於大型的復雜應用時,OOP 就是一個不得不考慮的選擇。
類
類是具有相同屬性和服務的一組對象的集合。它為屬於該類的所有對象提供了統一的抽象描述,其內部包括屬性和服務兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名並包括屬性說明和服務說明兩個主要部分。
對象
對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。
類與對象的關系就如模具和鑄件的關系,類的實例化結果就是對象,而對一類對象的抽象就是類。
關於面向對象的編程涉及的內容很廣泛,本教程只介紹基本的概念與在 PHP 中的應用。
類
使用關鍵字 class 來聲明一個類,后面緊跟類的名字,主體用 {} 符號括起來。
語法:
class class_name{ ...... }
類里面包含了屬性和方法。
屬性
通過在類定義中使用關鍵字 var 來聲明變量,即創建了類的屬性,也叫類的成員屬性。
語法:
class class_name{ var $var_name; }
舉個例子說明,如果定義一個 人 的類,那么人的 姓名、年齡、性別 等等便可以看做 人 這個類的屬性。
方法
通過在類定義中聲明函數,即創建了類的方法。
語法:
class class_name{ function function_name(arg1,arg2,……) { 函數功能代碼 } }
類的應用
一個定義了屬性和方法的類就是一個完整的類了,可以在一個類里面包含一個完整的處理邏輯。使用 new 關鍵字來實例化一個對象以便應用類里面的邏輯。可以同時實例化多個對象。
語法:
object = new class_name();
實例化一個對象后,使用 -> 操作符來訪問對象的成員屬性和方法。
語法:
object->var_name; object->function_name;
如果要在定義的類里面訪問成員的屬性或者方法,可以使用偽變量 $this 。$this 用於表示 當前對象 或 對象本身 。
例子:
<?php class Person { //人的成員屬性 var $name; //人的名字 var $age; //人的年齡 //人的成員 say() 方法 function say() { echo "我的名字叫:".$this->name."<br />"; echo "我的年齡是:".$this->age; } } //類定義結束 //實例化一個對象 $p1 = new Person(); //給 $p1 對象屬性賦值 $p1->name = "張三"; $p1->age = 20; //調用對象中的 say()方法 $p1->say(); ?>
運行該例子,輸出:
我的名字叫:張三 我的年齡是:20
PHP 數據類型 - 資源(resource)
資源
資源是一種特殊的變量類型,保存了到外部資源的一個引用:如打開文件、數據庫連接、圖形畫布區域等。
資源是通過專門的函數來建立和使用的。
例子:
<?php if(!file_exists("test.txt")){ $fh = fopen("test.txt","w"); //打開文件 echo get_resource_type($fh); // 輸出:stream fclose($fh); //關閉文件 } ?>
轉換為資源
由於資源類型變量保存有為打開文件、數據庫連接、圖形畫布區域等的特殊句柄,因此無法將其它類型的值轉換為資源。
釋放資源
由於 PHP4 Zend 引擎引進了資源計數系統,可以自動檢測到一個資源不再被引用了(和 Java 一樣)。這種情況下此資源使用的所有外部資源都會被垃圾回收系統釋放。因此,很少需要用某些 free-result 函數來手工釋放內存。
注意: 持久數據庫連接比較特殊,它們不會被垃圾回收系統破壞。