常用格式
1.定義類
class name{}
2.創建對象(實例化)
$obj = new name();
3.訪問對象中的成員
$obj->attr;
4.const常量
可以在類中定義常量,即不會在類中改變的值.對於從該類實例化的任何對象來說,常量值在這些對象的整個生命週期中都保持不變
echo self::PI;//類內部訪問
echo 類名::PI //類外部訪問
5.static靜態屬性與靜態方法
使用 static 關鍵字可以用來標識成員屬性,也可以用來標識成員方法,靜態成員屬於類所有,所以我們在靜態方法裏,不能使用 $this
來引用靜態成員
//定義一個名爲Person的類
class Person{
//設置常量attr爲"常量"
const attr = "常量";
//設置靜態變量$name爲"aaa";
static $name = "aaa";
//設置公開變量 $age爲"18";
public $age = 18;
//設置該類的show函數
function show(){
//輸出常量attr 必須用 self::attr 的方式
echo self :: attr
//輸出靜態變量$name 也必須用self::$name的方式
echo self :: $name
//輸出該類的一個公開變量
echo $this -> age;
}
}
//定義$obj爲一個Person類
$obj = new Person();
//執行$obj的show()函數
$obj -> show();
//錯誤的輸出常量方式
//echo $obj->attr;
//正確的輸出常量方式
//echo Person::attr;
//輸出類的公開變量,直接用->訪問
echo $obj->age;
//輸出類的靜態變量
echo $obj::$name;
//輸出類的所有屬性
echo Person;
構造函數和析構函數
構造函數
通常用來對成員屬性進行初始化賦值
__construct($name,$age);
析構函數
與構造函數對應的就是析構方法,析構方法允許在銷燬一個類之前執行一些操作或完成一些功能,比如說關閉文件,釋放結果集等.析構函數不能帶有任何參數,其名稱必須是
__destruct()
//定義類
class Person{
//該類的構造函數
function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
//該類的show函數
function show(){
echo "姓名:$this->name"."<br>年齡:$this->age";
}
//該類的析構函數,造所有操作完成時觸發
function __destruct(){
echo "完成";
}
}
$obj = new Person("abc",18);
$obj->show();
$obj->show();
$obj->show();
$obj->show();
$obj->show();
//最後一個show()執行完之後析構函數會執行
$obj->show();
訪問修飾符(作用域描述符)
訪問修飾符允許開發人員對類的訪問進行限制,這是PHP5的新特性
public
公共修飾符
類的成員將沒有訪問限制,所有的外部成員都可以訪問(讀寫)這個類成員
private
私有修飾符
被修飾爲private
的成員,對於同一個類裏地所有成員是可見的,即沒有訪問限制;但對於該類的外部代碼是不允許改變甚至讀操作,對於該類的子類,也不能訪問
protected
保護修飾符
被修飾爲protected
的成員不能被該類的外部代碼訪問.但是對於該類的直接子類有訪問權限,可以進行屬性,方法的讀寫操作.被子類繼承的protected成員,在子類外部同樣不能被訪問
class Person{
public $name = "abc";
private $age = 18;
protected $a = 123;
function show(){
echo $this -> name;
echo $this -> age;
echo $this -> a;
}
}
$obj = new Person();
//public是公開的,外部也可以訪問
echo $obj -> name;
//private是私有的,外部不能訪問
echo $obj -> age;
//protected受保護的,外部不可訪問
echo $obj -> a;
//extends創建person類的子類son
class Son extends Person{
function show2(){
echo $this -> name;
//繼承父級私有變量,無法訪問
//echo $this -> age;
echo $this -> a;
}
}
$son = new Son();
$son ->show();
封裝
封裝就是把對象的屬性和行爲結合成一個獨立的相同單位,並儘可能隱蔽對象的內部細節
繼承
面向對象開發方法建立在繼承概念的基礎上,這種策略提高了代碼的重用性。
在PHP中,類繼承通過 extends
關鍵字實現;
繼承自其他類的類稱爲子類(child class 或 subclass)
子類所繼承的類稱爲父類( parent class) 或 基類 (base class)
多態
對象的多態性是指在父類中定義的屬性或行爲被子類繼承之後,可以具有不同的數據類型或表現出不同的行爲。這使得同一個屬性或行爲在父類及其各個子類中具有不同的語義。