類中成員
一個類的內部可以有3種代碼:
屬性
方法
類常量
它們統稱為“類中成員”。
一般屬性
屬性就是放在一個類中的變量。
定義形式:
形式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; //右邊不能是變量
使用形式:
$對象->屬性名; //注意:屬性名前面沒有$符號。
說明:
通常,可以出現變量(數據)的位置,就可以出現對象的屬性。
課堂課間練習:
寫一個人類對象,具有3個屬性,並能夠完成求直角三角形的斜邊的工作。
一般方法
方法定義跟原來函數定義幾乎一樣。
使用是通過類或類的對象來進行的。
方法前可以加修飾詞:public, protected,private,省略就算“public”
方法中$this關鍵字
$this是一個“偽對象”,代表當前所屬類的當前對象。
一些簡單說法:
類是定義好的某些對象的“模板/模型”
對象是根據該模板/模型所“創建”出來的具體物體
一個對象可以有哪些屬性(數據),是由該類來決定的。
一個對象可以做那些事情(方法),也是由該類來決定。
通常認為,一個類(對象),就是擁有一些數據,並通過它自己的方法可以去處理這些數據的“獨立體”
一個系統函數:get_class(對象)
作用:獲得某個對象的“所屬類名”——結果只是一個類名字符串。
$class_name = get_class($p1); //結果可能是:”Person”
靜態屬性
在定義屬性的時候,前面加上關鍵字:static,此時就是靜態屬性。
靜態屬性有什么用?
對比來說:一般屬性,他的值是隸屬於該類的具體某個對象(雖然定義在類中),或者說,每個對象的同樣的屬性的值,有可能不一樣。
靜態屬性就是:只隸屬於類本身——也可以看做是所有對象的“共有數據”。
靜態屬性的使用:
通過特殊的語法:::(雙冒號語法,也叫范圍解釋符)
類::$靜態屬性名;
對比普通屬性的使用:
對象->普通屬性名; //普通屬性也可以叫做“實例屬性”,相應的,對象也叫“實例”
靜態方法
如果在一個方法的前面加上static關鍵字修飾,則就變成了靜態方法。
靜態方法同樣隸屬於類,而不是隸屬於具體對象。使用方法跟靜態屬性類似:
類名::靜態方法名();
從理念上,可以認為,靜態方法是只隸屬於類,而為所有對象所“共有”。
如果通過類名來調用靜態方法,則該方法中不可以出現$this關鍵字。
self:
含義:代表當前類
使用:通常只能在某個類的某個方法內部代表該類的名稱。
構造方法
構造方式是類中的一個“特殊”方法,其作用是在實例化一個對象的同時,給該對象的屬性賦值,使之一創建完成,就具有了其本身的特有數據(屬性值)。
1,該方法名字是固定的,為:__construct();
2,該方法必須是普通方法(不能是靜態方法)
3,通常該方法應該是public
4,通常該方法中使用$this這個關鍵字來對屬性進行賦值
5,當new 類名()的時候,其實是在調用該構造方法
6,如果一個類中定義了構造方法,則實例化該類時就會調用該方法,且實例化時的參數需要跟構造方法的參數匹配
析構方法
構造方法是“創建”對象的時候會自動調用。
析構方法是“銷毀”對象的時候會自動調用。
系統方法通常用於在銷毀對象的時候來“清理數據”(打掃戰場)——如果需要,就可以利用這個機會去處理。
通常,php程序結束后,所有對象都會自動銷毀(其實屬於php內部的垃圾回收機制)
