類似JAVA,C++,PHP也有html' target='_blank'>面向對象,關于類,對象,繼承,封裝...的概念也類似,所以這里直接來說明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編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
|
新聞熱點
疑難解答