1)、類、對象、實例的關係
類是對象的抽象,對象是類的具體化,實例是對象的另一種名稱。
2)、類的定義
①、成員屬性(變量)的定義與使用
成員屬性必須 var public protected private
語法:
形式1:var $v1 ; //定義不賦值
形式2: var $v2 = 2; //定義的同時可以賦值,該值只能是“直接值”,常量(值),不能是變量值,也不能是“計算表達式”
形式3:public $v1;
形式4:public $2 = 2; //其實var是“public”一個別名,正式用public更好。
作用:對事物特徵的描述。
錯誤形式:
$v1 = 1;
var $v2 = 1+3; //右邊不能是計算表達式
public $v3 = $v2; //右邊不能是變量
使用形式:
$對象->屬性名;//注意:屬性名前面沒有$符號。
②、成員方法(函數)的定義與使用
語法:關鍵字(缺省時默認public) + function + 名稱(參數)
定義成員方法的時候可以加參數也可以不加參數
③、this,self,parent三個關鍵字
this就是指向當前對象實例的指針,不指向任何其他對象或類。
self通常只能在某個類的某個方法內部代表該類的名稱。
parent如果想在子類中調用父類的同名方法,那麼請你使用關鍵字parent::+方法名()
④、php鏈式調用原理
在一個類中有多個方法,當你實例化這個類,並調用方法時只能一個一個調用
如果要實現鏈式調用,這要在方法的結束添加return $this即可。
3)、static關鍵字
static 關鍵字來定義靜態方法和屬性。static 也可用於定義靜態變量以及後期靜態綁定
①、靜態類:
PHP中和Java中一樣:如果一個類要被聲明爲static的,只有一種情況,就是靜態內部類。
類中成員有:靜態的和非靜態的,而靜態類只有一種,那就是靜態內部類。
②、靜態成員
靜態屬性:只隸屬於類本身——也可以看做是所有對象的“共有數據”。
使用:類::$靜態屬性名
靜態方法:同樣隸屬於類,而不是隸屬於具體對象。
使用:類名::靜態方法名();
【注】1、靜態方法中只能調用靜態屬性和靜態方法,不能調用非靜態屬性和方法,self::方法名()、self::屬性名
2、動態方法中靜態方法和動態方法都可以調用,如果在同一個類中:
調用靜態方法使用:self::方法名()、self::屬性名,
調用動態方法用this−>方法名()、this−>方法名()、this->屬性名
3、只有實例化的時候纔會自動調用構造函數,所以只有動態類纔可以觸發構造函數,靜態類不會觸發構造函數
4、由於靜態方法不需要通過對象即可調用,所以僞變量 $this 在靜態方法中不可用。
5、靜態屬性只能被初始化爲文字或常量,不能使用表達式。所以可以把靜態屬性初始化爲整數或數組,但不能初始化爲另一個變量或函數返回值,也不能指向一個對象。
6、自 PHP 5.3.0 起,可以用一個變量來動態調用類。但該變量的值不能爲關鍵字 self,parent 或 static。
③、後期靜態綁定:
Self:通常只能在某個類的某個方法內部代表該類的名稱,所以指向當前A類的who方法,static有後期綁定的概念,所以指向B類,因爲是B在調用test方法,所以指向B類,而B類中有who方法。
4)、類常量(const關鍵字)
1:類裏面定義的常量,用const定義,常量是屬於類的,不是對象的。
2:定義類中的常量的時候必須給初始值
3:在使用類中的常量的時候,要使用類名::+常量名或者self::+常量名來調用
4:在類的外部調用類的常量,只能使用類名::+常量名來調用
5:類中定義的常量只歸類所有,不歸對象所有,不能通過對象來調用
類內部調用類常量:
類外部調用類常量:
5)、範圍解析操作符(::)
作用:可以用於訪問靜態成員,類常量,還可以用於覆蓋類中的屬性和方法。
實例1:類的外部使用 :: 操作符
實例2:self,parent 和 static 這三個特殊的關鍵字是用於在類內部對其屬性或方法進行訪問的
實例3:調用父類的方法
6)、實例化中的問題
實例化對象的格式爲:
$變量名 = new 類名(); //括號裏可傳參數
給對象中的成員屬性賦值的格式爲:
$引用名 ->成員屬性 = 值;
調用對象中的成員方法的格式爲:
$引用名 -> 成員方法;
成員方法使用成員屬性的格式爲
$this -> 成員屬性;
實例化對象時參數問題:
1:當我們實例化一個php類的時候,要怎麼傳遞參數呢?這取決於該類的構造方法。
2:可以通過var_dump()打印對象,不過只能打印對象的屬性,它的方法不能打印出來。
3:要想獲取對象的方法列表,可以用get_class_methods函數。
【注】