類的概念:類是具有相同屬性和操作的一組對象的集合。它為屬於該類的所有對象提供了統一的抽象描述,其內部包括屬性和操作兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名並包括屬性說明和操作說明兩個主要部分。
1、類的定義:
i. 類的關鍵字定義使用class
1.定義一個空類
Class Person{};
2.定義一個有成員屬性和操作的類
Class Person{
成員屬性........
操 作........
}
3.定義一個不能被繼承的類,使用final關鍵字
Final class Person{
成員屬性........
操 作........
}
4.注意:final關鍵字不能用來修飾成員屬性 ,只能修飾類和方法(final方法後面介紹)
5.這裡舉一個帶有final的class
定義一個final的類FinalClass,包含一個公共函數
final class FinalClass {
public function ffun() {
echo “本類為final類”;
}
}
定義一個類ChildFinalClass 並繼承FinalClass 類
class ChildFinalClass extends FinalClass {
public function fchildfun() {
echo ‘本類繼承final類FinalClass ’;
}
}
這樣當執行以上命令的時候系統會提示
Fatal error: Class ChildFinalClass may not inherit from final class (FinalClass)
證明由final關鍵字定義的class是不可以被子類繼承的
2、類中成員屬性的定義
i. 成員屬性就是對該類定義的一些變量屬性,那人作為一個類來說,人都有一對眼睛(正常的啊,二郎神除外),一張嘴,兩個耳朵,等這樣的一些固定的用來描述或表現某種事物的專有名詞稱為成員屬性
ii. 類中成員屬性的聲明使用的關鍵字
iii. 常見成員屬性聲明是由關以下鍵字
public,var,protected,private開頭的,然後跟一個變量來組成的。還有一些成員屬性包括,靜態static,常量const.
Public: 表示全局的,類內部外部子類都可以訪問
Var: php 5 版本中會認為這個成員屬性為public類型的屬性
protected 表示受保護的,只有本類或子類或父類中可以訪問
private
表示私有的,只有本類內部可以使用
Static: 1)靜態的屬性,
2)用static修飾的成員屬性可以被同一個類的所有對象共享
3) 靜態的數據是在類第一次被加載的時候就存在了內存中的數據段中(初始化靜態段)
4)類中使用self::成員屬性名
5)類外 類名::成員屬性名
Const: 1)類中常量屬性,在類中聲明常量必須使用const
2)類中使用 self::成員屬性名
3)類外使用 類名::成員屬性名
注意:屬性中的變量可以初始化,但是初始化的值必須是常數,這裡的常數是指php腳本在編譯階段時就為常數,而不是在編譯階段之後在運行階段運算出的常數。例如,不能包含任何運算符,不能是任何變量,不能是一個函數等。
iv. 成員屬性的調用方式:
在類的成員方法裡面,可以通過 $this->property(property是屬性名字)這種方式來訪問類的屬性、 方法,但是要訪問類的靜態屬性或者在靜態方法裡面卻不能使用,而是使用 self::$property。 在類的非靜態方法裡面可以使用偽變量 $this,這個偽變量是調用該方法的實例化對象引用。
接下來用代碼對上面的內容做一下解釋:
class FinalClass {
//static $a = strTolower();
//這種寫法錯誤
//const A = 1+2; //這種寫法錯誤
//public $name = 123+456;
//這種寫法錯誤
static $a = '$a';
const A = 'A';
public $name = '鳳姐';
protected $sex = '男+女';
private $age = 23;
}
class ChildFinalClass extends FinalClass{
public function fchildfun(){
echo 'ChildFinalClass類中ChildFinalClass::$a->'.ChildFinalClass::$a."<hr>";
Echo 'ChildFinalClass類中ChildFinalClass::A->'.ChildFinalClass::A."<hr>";
echo '大家好,我叫'.$this->name."<hr>";
echo '我是:'.$this->sex.'生<hr>';
echo '我今年:'.$this->age.'<hr>';
//由於age是私有的成員屬性,所以在這裡將不會被調用,將提示沒有定義此屬性在ChildFinalClass類中。
}
}
$obj = new ChildFinalClass();
$obj->fchildfun();
3、類中操作的定義
i. 我本人一般喜歡叫操作為成員方法,以下我會叫操作為方法其實都是一樣的
ii. 成員方法的定義:成員方法就是對該類定義的一些函數方法,比如拿這個類來例句例子,人能吃飯,能跑步,能敲代碼,這就是成員方法。也就是可以做一些可執行性的動作我們理解為成員方法
iii. 成員方法的訪問和成員屬性一樣可以參照上面成員屬性的訪問介紹。
iv. 成員方法和成員屬性一樣也包括public,protected,private,static,final並且作用域也是一樣的,接下來舉一些例子供大家參考和理解。
v. 靜態的成員方法只能訪問靜態的成員屬性和成員方法,並且類內部訪問靜態方法可以使用self::靜態方法(), 類外部訪問使用類名::靜態方法()
1. 自定義方法:
class FinalClass {
static $a = '$a';
const A = 'A';
public $name = '鳳姐';
protected $sex = '男+女';
private $age = 23;
//定義一個公共方法
public function publickfun(){
echo 'FinalClass類中self::$a->'.self::$a."<hr>";
echo "FinalClass類中self::A->".self::A."<hr>";
echo '大家好,我叫:'.$this->name."<hr>";
echo '我是:'.$this->sex.'生<hr>';
echo '我今年:'.$this->age.'<hr>';
}
//定義一個受保護的方法
protected function protectedfun(){
echo 'FinalClass類中self::$a->'.self::$a."<hr>";
echo "FinalClass類中self::A->".self::A."<hr>";
echo '大家好,我叫:'.$this->name."<hr>";
echo '我是:'.$this->sex.'生<hr>';
echo '我今年:'.$this->age.'<hr>';
}
//定義一個私用方法
private function privatefun(){
echo 'FinalClass類中self::$a->'.self::$a."<hr>";
echo "FinalClass類中self::A->".self::A."<hr>";
echo '大家好,我叫:'.$this->name."<hr>";
echo '我是:'.$this->sex.'生<hr>';
echo '我今年:'.$this->age.'<hr>';
}
}
class ChildFinalClass extends FinalClass{
public function fchildfun(){
echo 'ChildFinalClass類中ChildFinalClass::$a->'.ChildFinalClass::$a."<hr>";
Echo 'ChildFinalClass類中ChildFinalClass::A->'.ChildFinalClass::A."<hr>";
echo '我是:'.$this->sex.'生<hr>';
echo '我今年:'.$this->age.'<hr>';
//由於age是私有的成員屬性,可以理解為我不想讓別人知道我的年齡,所以在這裡將不會被調用,將提示沒有定義此屬性在ChildFinalClass類中。
$this->publickfun();
$this->protectedfun();
$this->privatefun();
//由於privatefun是私有的成員方