物件導向和面向過程的區別:優缺點
類 : 具有相同特性和行為的物件的抽象就是類。因此,物件的抽象是類,類的具體化就是物件,也可以說類的例項是物件,類實際上就是一種資料型別。
在物件導向的程式語言中,「類」 是乙個獨立的程式單位,它應該有乙個類名幷包括 「屬性」 說明和「方法」 說明兩個主要部分。
類的成員
類的成員主要包括 屬性 和 方法。
屬性 : 又叫成員屬性或成員變數 , 其本質就是變數,但是它也是和某個具體的類是繫結起來的。它就是
這個類的特徵,比如說狗的體重、身高等等。
方法 : 又叫成員方法 , 其本質就是函式, 但是它也是和某個具體的類是繫結起來的。 它是這個類的一些
固有的行為,比如說狗的奔跑、吃飯、睡覺等等。
物件的成員
既然物件是類的單獨的乙個個體 , 那麼這個物件也會有該類的屬性和方法:
物件的狀態(屬性) : 乙個物件用資料值來描述它的狀態。
物件的操作(方法) : 用於改變物件的狀態,物件及其操作就是物件的行為。
物件實現了資料和操作的結合,使資料和操作封裝於物件的統一體中。
思考 : 狗的毛色是屬性還是方法? 狗的嗅覺是屬性還是方法?狗吃東西是屬性還是方法?
物件導向程式設計的三大特性 封裝 , 繼承 , 多型
定義屬性標語法格式:
訪問許可權修飾符 屬性名[= 預設值];
public $name = '小白';
需要注意的是 , 定義屬性的時候 , 訪問許可權修飾符必須存在(不能省略)。
定義方法語法格式: [訪問許可權修飾符] 方法/函式識別符號 方法名 (引數...) {}
public function eat()
乙個完整的類包含屬性和方法。
訪問修飾符:
1.public !
public : 被定義為公有的類成員可以在任何地方被訪問。
在子類中可以通過 self::屬性名(或方法名) 呼叫public方法或屬性,parent::方法名 呼叫父類方法
在例項中可以能過 $obj->屬性名(或方法名) 來呼叫 public型別的方法或屬性
2.protected (了解)
protected : 被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。
在子類中可以通過 self::屬性名(或方法名) 呼叫protected方法或屬性,parent::屬性名(或方法名) 呼叫父
類方法。
在例項中不能通過 $obj->屬性名(或方法名) 來呼叫 protected型別的方法或屬性
3.private (了解)
private : 被定義為私有的類成員則只能被其定
義所在的類訪問。
在該類的例項、子類中、子類的例項中都不能呼叫私有型別的屬性和方法
以上主要學習了如何定義乙個類,成員呼叫(訪問許可權修飾)
構造方法與析構方法
構造方法(construct) :是一種特殊的方法。物件的建立就是通過構造方法來完成,其功能主要是完成對
象的初始化, 它可以有引數,也可以沒有引數。當類例項化乙個物件時會自動呼叫構造方法。
構造方法的兩大作用: 1. 構造出來乙個類的例項 2. 對構造出來的乙個類的例項(物件)初始化
構造方法的特點:
①構造方法名和類名相同(php4版),php5版之後的構造方法名可以和類名相同,也可以是
__construct();
②構造方法沒有返回值;
③構造方法的主要作用是完成對新物件的初始化,並不是建立物件本身;
④在建立新物件後,系統會自動的呼叫該類的構造方法,不需要自己寫**呼叫;
⑤乙個類有且只有乙個構造方法,在php5後雖然__construct() 和 類名() 可以共存,但是實際上也
只能使用乙個;
⑥如果沒有給類自定義構造方法,則該類使用系統預設的構造方法;
⑦如果給類自定義了構造方法,則該類的預設構造方法被覆蓋;
⑧構造方法的預設訪問修飾符是public。
析構函式(destructor) 與構造方法相反,當物件結束其生命週期,如物件所在的函式已呼叫完畢時,系
統自動執行析構函式。析構函式往往用來做「清理善後」 的工作。
析構方法的寫法(不用自己寫,系統在結束的時候會自己給):
function __construct()
function __destruct()
function show()
魔術方法 : 我們前面介紹的__construct,這個方法就是乙個特殊方法,它會在類被例項化的時候自動調
用。這些特殊方法也往往稱之為「魔術方法」,而且也多以 「雙下劃線」 開頭,其目的就是和普通的方法名
進行區分。
注意 : 魔術方法不需要自己手動呼叫 只要有符合對應魔術方法的情況 , 它自己就會執行 , 魔術方法並不
是為了固定的執行某個功能 , 而是觸發後執行自定義的功能。
魔術方法的作用 :是更好的物件導向,增強程式的健壯性,以及更多的技巧性的東西。
注意:在靜態方法中可以呼叫靜態成員, 但是無法呼叫普通成員。
靜態成員的特點總結:
靜態資料成員和普通資料成員區別較大,體現在下面幾點:
普通資料成員屬於類的乙個具體的物件,只有物件被建立了,普通資料成員才會被分配記憶體。而靜
態資料成員屬於整個類,即使沒有任何物件建立,類的靜態資料成員變數也存在。
因為類的靜態資料成員的存在不依賴與於任何類物件的存在,類的靜態資料成員應該在**中被顯
式地初始化,一般要在類內進行。
外部訪問類的靜態成員能直接通過類名來訪問。
類例項化物件可以訪問靜態方法,但不能訪問靜態屬性
類的靜態成員函式無法直接訪問普通資料成員(可以通過物件名間接的訪問),而類的任何成員函
數都可以訪問類的靜態資料成員。
靜態成員和類的普通成員一樣,也具有public、protected、private3種訪問級別。
類常量(const)
以前定義常量使用 'define' 函式定義 , 這種常量是全域性常量 , 在任何地方都可以被訪問到 , 而類常量則是
專屬於該類的常量。
1.定義類常量
定義類常量的格式:
const 常量名 = 值;
類常量和靜態屬性類似 , 呼叫也需要使用 範圍解析符 '::' 。
類常量的呼叫格式:
類名::類常量名;
類全域性常量和全域性常量的區別:
總結 : 全域性常量可以不用使用任何識別符號直接在任何地方呼叫到 , 而類常量必須使用對應的類名稱或代
錶類名稱的關鍵字來使用。
繼承
: 是指建立乙個新的派生類,從乙個先前定義的類中繼承資料和函式,而且可以重新定義或加進新
資料和函式,從而建立了類的層次或等級。而派生類就是從乙個類衍生出的類。
PHP物件導向基礎
1 constract 建構函式知識點 a 例項化物件的時候,如果子類沒有建構函式,就呼叫父類的建構函式。如果子類有建構函式,這首先呼叫自己。b 呼叫父類的建構函式 parent constract 2 php不支援多重繼承,因為多重繼承容易產生二義性。但如果讓c b a,就可以實現多重繼承的功能。...
php基礎 物件導向
物件導向的申明方式 物件class one b newone b aa 建構函式建構函式 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。php 5 允行開發者在乙個類中定義乙個方法作為建構函式,語法格式如下 class sit...
PHP物件導向的基礎
1 使用extends實現繼承以及過載 魔術方法的含義 class b extends a 宣告的時候b裡可以沒有a裡的方法 呼叫的時候 b new b b a裡的方法 b a裡的屬性 1 b b裡的方法 b b裡的方法 如果 a new a 可以 a a裡的方法 a a裡的屬性 1 不可以 a b...