標籤:style blog http color io os 使用 ar java
類似JAVA,C++,PHP也有物件導向,關於類,對象,繼承,封裝...的概念也類似,所以這裡直接來說明PHP物件導向的用法。
一.類的聲明
class Person{
//成員屬性
//成員屬性前必須有關鍵字修飾,最起要有個var
//成員屬性不要使用資源類型和空類型(resource null),最好不要在聲明類時賦初值。
var $name; //預設為public
private $age; //private:體現封裝性,不能在外部賦值,擷取,訪問,只能在內部
static $sex;
//成員方法
function run(){ //預設public
//方法體
}
function eat($food){
//方法體
}
private function sleep(){
//方法體
}
//魔術方法 ,已預定義,但須在類中聲明和自訂方法體
__construct($var1=‘‘,$var2=‘‘){ //構造方法,不要設定成private
//對象建立完成後第一個被對象自動調用(一次)的方法,若未顯示聲明,系統會預設產生
//PHP中僅能有一個建構函式(PHP中不能有重名函數),但可通過預設參數實現重載的功能
//方法體
}
function __distruct(){ //解構函式,不能帶參數,最好別私人
//在對象失去引用,在被記憶體回收程式回收之前自動調用(棧先進後出特點,後進的先失去引用)
//方法體
}
private function __set($name,$value){ //外部為私人成員屬性賦值,自動調用,宜為private
//方法體
}
private function __get($name){ //外部擷取私人成員屬性,同__set
//方法體 最後宜返回,不宜輸出
}
private function __isset($name){ //外部擷取私人成員屬性是否被定義,同__set,在外部調用isset時自動調用,非私人直接於isset
//方法體
}
private function __unset($name){ //外部獲刪除私人成員屬性,同__isset,在外部調用usset時自動調用,非私人直接於unset
//方法體
}
}
二.類的執行個體化
$me = new Person(); //若類中有帶參數的建構函式,則可以再括弧中加入參數
三.成員的訪問
//非靜態(static)成員
$me->name = "Lee";
$me->eat("apple");
//對象內部成員間訪問
$this->name = "me";
//調用父類中被重載的方法
parent::__construct();
//類內部靜態(static),常量(const)
self::name;
self::eat(‘foot‘);
//類外部靜態(static),常量(const)
Person::name;
Person::eat(‘food‘);
四.類的繼承
class Student extends Person{
//成員
}
五.方法重載
//子類中重寫方法的存取控制許可權不能低於父類的
六.常見關鍵字和魔方方法
除上述關鍵字和魔方方法外,還有:
final:修飾類,不能被繼承。修飾方法,繼承後不能被覆蓋。否則報錯。不能修飾屬性。
static:靜態成員。修飾成員變數,成員方法。唯一存在,共用.屬於類,不屬於對象。
const:類內常量。聲明時賦初值。唯讀。訪問方式同static
__clone(){ //複製對象時重新初始化,自動調用($this本副本對象,$that原對象) $p2 = clone $p1;//複製
//方法體
}
__toString(){ //輸出對象時自動調用,返回對象都字串形式
//方法體
return
}
__call($var1,$var2){ //調用類中不存在的方法時自動調用(否則報錯退出執行),$var1接受方法名,$var2接受參數數組
//方法體
}
__sleep(){ //序列化時自動調用,序列化部分屬性
//方法體
return
}
__wakeup(){ //反序列化時自動調用,為部分屬性重新賦值
//賦值
}
七.其他
__autoload($lei){ //當使用的類沒被定義類時自動調用(不聲明在類中,全域函數)
include(..$var..); //ucfirst();全裝換為小寫;
}
serialize($lei); //類序列化(將類儲存為二進位字串以網路傳輸或持久儲存),unserialize()解序列化
PHP物件導向