物件導向整理

2022-08-17 11:33:18 字數 4360 閱讀 1758

傳統的面向過程:將要完成的工作分作若干步驟,或在細分為子步驟,然後按步驟從前往後一步一步完成,然後達到目的,好比做飯,洗菜,切菜,下鍋等等每一步都是自己完成最終做成。

現代的物件導向:將要完成的工作拆分為乙個乙個物件的任務,每個物件獨立完成自己的任務,任務之間的連線通過呼叫來實現,最終也完成了整體的工作。也像做飯只是洗菜,切菜等這些步驟不用自己完成,而是讓物件完成,自己最後只負責用就可以。

萬事萬物皆物件。物件導向是設計思想的昇華,面向過程是解決簡單問題的自然的思維過程,物件導向是解決大規模的複雜問題的良好思想。

張三,李四,王五都是物件,他們都隸屬於「人」這個類,同時我們也可以說隸屬於 脊椎動物類 同樣都是生物類。

類:是用於描述某一些具有共同特徵的物體的概念表,是某一類物體的總稱。

通常,乙個雷所具有的共同特徵包括2大方面的資訊:  屬性;方法。

物件:是指乙個具體的物體,該物體隸屬於某個類別。

通常,物件離不開類,沒有類就不能有物件

原來(在面向過程)的語法中,我們的**有如下幾種**:

定義變數;

定義函式;

使用變數(輸出,賦值,等)

呼叫函式;

流程控制(if,switch,for,while等)

在物件導向的語法中,則情況就發生變化了:

1,定義類;定義類的語法中,只有這3種**:

1.1定義屬性(變數)

1.2定義方法(函式)

1.3定義常量(類常量)

2,建立類的物件;

$物件名=new 類名();

3,使用物件;

使用其屬性:因為屬性就是「變數」,則使用其屬性,也就是跟以前使用變數一樣。

使用其方法:因為方法就是「函式」,則使用其方法,也就是跟以前使用函式一樣。

使用其常量:類似使用以前的普通常量。

php中,變數傳值方式有2個:

值傳遞:     傳遞的時候,拷貝的是資料本身。預設都是值傳遞。

結果:傳遞完之後,有了2份同樣的資料,但兩個變數「相互獨立」沒有關係。

引用傳遞:  傳遞的時候,拷貝的是引用關係。需要使用「&」才能實現引用傳遞。

結果:傳遞完之後,資料仍然只有乙份,但是兩個變數共同指向該資料。

則在物件導向這個層面,基本來說,仍然如此:

預設是值傳遞:

可以使用引用傳遞:

有一點不同,值傳遞複製的是物件識別符號

乙個類的內部可以有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;       //右邊不能是變數

使用形式:

$物件->屬性名;           //注意:屬性名前面沒有$符號。

通常,可以出現變數的位置,就可以出現物件的屬性

方法定義跟原來函式定義幾乎一樣。

使用是通過類或類的物件來進行的。

$this關鍵字:$this是乙個偽物件,代表當前所屬類的當前物件;

類是定義好的某些物件的「模板/模型」

物件是根據該模板/模型所「建立」出來的具體物體

乙個物件可以有哪些屬性(資料),是由該類來決定的。

乙個物件可以做那些事情(方法),也是由該類來決定。

通常認為,乙個類(物件),就是擁有一些資料,並通過它自己的方法可以去處理這些資料的「獨立體」

系統函式:get_class(物件)  獲得某個物件的所屬類名,結果是乙個類名字串

定義屬性的時候,前面加上關鍵字:static,此時就是靜態屬性

靜態屬性有什麼用?

對比來說:一般屬性,他的值是隸屬於該類的具體某個物件(雖然定義在類中),或者說,每個物件的同樣的屬性的值,有可能不一樣。

靜態屬性就是:只隸屬於類本身——也可以看做是所有物件的「共有資料」

靜態屬性的使用:通過特殊語法,:: 雙冒號語法,也叫範圍解釋符

類::$靜態屬性名; 普通屬性使用 :物件->普通屬性名

如果在乙個方法的前面加上static關鍵字修飾,則就變成了靜態方法。

靜態方法同樣隸屬於類,而不是隸屬於具體物件。使用方法跟靜態屬性類似:

類名::靜態方法名();

從理念上,可以認為,靜態方法是只隸屬於類,而為所有物件所「共有」。

如果通過類名來呼叫靜態方法,則該方法中不可以出現$this關鍵字。

注意:$this不能在靜態方法中使用;靜態方法不能呼叫非靜態方法

含義:代表當前類

使用:通常只能在某個類的某個方法內部代表該類的名稱

class s2

通常,乙個方法,如果沒有特別宣告,則下級類就可以對其進行「覆蓋」(重寫)。

但是:如果某個方法不希望被下級類覆蓋,就可以對其生命為「最終方法」。

形式:final  function 

方法名()

所謂設計模式,就是一些解決問題的「常規做法」,是一種認為較好的經驗總結。面對不同的問題,可能會有不同的解決辦法,此時就可以稱為不同的設計模式。

在實際應用中,我們總是需要去例項化很多很多的類——以得到物件。

則:我們可以設計出乙個「工廠」(其實就是類),該工廠的作用(任務)就是為人們「生產」各種物件。這種工廠通常只要指定類名,就可以據此獲取乙個該類的物件。

對於某些類,在使用它的時候,從頭到尾(程式執行的開始到結束),都只需要乙個物件,就可以完成所有任務。

某個類,只允許其「建立」出乙個物件,即使去進行多次建立,也只能得到乙個物件。

注意:1、屬性私有化

2、構造私有化

3、方法私有化

4、轉殖私有化

在正常定義類的前面加上關鍵字:abstract,就構成抽象類

abstract 

class  類名

抽象類用來規範一些類的共同特性,但不需要對其實例化,專門作為父類

抽象方法是乙個沒有方法體(也不含大括號)的方法定義「頭」而已。

前面需要加上abstract。

比如:abstract  function 

f1($x1, $y, $m) ;

跟抽象類一樣,配合抽象類,來實現對下級類的「行為規範」。

即相當於要求下級類去完成該功能(動作),但自己是不做的。

1,如果乙個方法定義為抽象方法,則其所在的類必須定義為抽象類。

2,但,乙個抽象類中,可以沒有抽象方法——但通常意義不大。

3,子類繼承自乙個抽象類,則子類必須實現父類中的所有抽象方法,除非子類也繼續作為抽象類

4,子類實現抽象父類的方法時,訪問控制修飾符的範圍不能降低,且方法的引數也須一致——其實這就是重寫,所以要滿足重寫的要求。

屬性過載: 如果使用乙個不存在的屬性,就會去自動呼叫類中預先定義好的某個方法以處理資料;

方法過載: 如果使用乙個不存在的方法,就會去自動呼叫類中預先定義好的某個方法以處理該行為

屬性有哪些使用情形?其實跟變數一樣,只有4種使用情形:

取值:$v1 = 物件->屬性;

賦值:物件->屬性 = xx值;

判斷是否存在:isset(物件->屬性;)

銷毀:unset(物件->屬性;)

所謂屬性過載,就是在面對上述4種情形的屬性使用場景中,該物件如果來「應對」的問題。

如果某屬性不存在,但在語法中使用如下情形,則會發生:

取值:$v1 = 物件->屬性;              ===>自動呼叫類中的__get()方法

賦值:物件->屬性 = xx值;           ===>自動呼叫類中的__set()方法

判斷是否存在:isset(物件->屬性;)     ===>自動呼叫類中的__isset()方法

銷毀:unset(物件->屬性;)                ===>自動呼叫類中的__unset()方法

前提都是:類中要預先定義好這些方法。

當使用乙個物件呼叫乙個不存在的普通方法的時候,會自動去呼叫預先定義好的"__call"方法。

其中,該方法必須帶2個引數

當使用乙個物件(類)呼叫乙個不存在的靜態方法的時候,會自動去呼叫預先定義好的"__callstatic"方法。

其中,該方法必須帶2個引數。其實跟前面一樣!

魔術方法:__get(),

__set(),  __isset(), __unset(),  __call(), 

__callstatic();

javascript 物件導向整理

整理一下js物件導向中的封裝和繼承。js中封裝有很多種實現方式,這裡列出常用的幾種。直接將我們的成員寫入物件中,用函式返回。缺點 很難看出是乙個模式出來的例項。function stu name,score var stu1 stu 張三 80 var stu2 stu 李四 90 console....

資料整理 物件導向

物件導向 1.物件導向其實就是思考問題的一種方式 物件導向不是替代面向過程的,是基於面向過程的 由執行者變為指揮者 好處 便於維護和修改 2.物件 具體存在的個體 看得見摸得著,真實存在的 3.類 定義類的方法 class 類名 類其實就是一種資料型別,只不過這個資料型別不是微軟設定的 具有相同屬性...

物件導向 多型學習整理

物件的多型性 乙個物件,兩種形態 概述 例如,麵包具備麵食的形態,又具備食物的形態,這就是物件的多型性。簡單說就是乙個物件對應著不同的型別。多型在 中的體現 父類或者介面的引用指向其子類物件。多型的好處 提高了 的擴充套件性,前期定義的 可以使用後期的內容。多型的弊端 前期定義的內容不能使用 呼叫 ...