標籤:定義變數 可見 new 傳值 .com 3.2 物件導向 1.2 概念
類與對象
張三是一個對象,李四也是一個對象。王五同樣是一個對象。。。。。
他們都隸屬於“人”這個“類”(人類),同時我們也可以說隸屬於“脊椎動物類”,還可以說屬於動物類,甚至生物。
類(抽象):是用於描述“某一些具有共同特徵”的物體的概念,是某一類物體的總稱。
通常,一個類所具有的共同特徵包括2大方面的資訊:
外觀,形狀,描述,資料。。。。。屬性
行為,動作,功能。。。。。。。。方法。
對象(具體執行個體):是指一個具體的“物體”,該物體隸屬於某個“類別”(類)。
通常,對象離不開類,沒有類,就不能有對象。
可見,類無非就是將一個變數和一些函數以及一些常量用一個“名字”包起來了,此名字就是“類名”。
另一方面,我們就說,這些屬性,函數,和常量就“隸屬於”該類——只能由該類(及其建立出來的對象)來使用。
原來(在面向過程)的文法中,我們的代碼有如下幾種代碼:
定義變數;
定義函數;
使用變數(輸出,賦值,等)
調用函數;
流程式控制制(if,switch,for,while等)
在物件導向的文法中,則情況就發生變化了:
1,定義類;定義類的文法中,只有這3種代碼:
1.1定義屬性(變數)
1.2定義方法(函數)
1.3定義常量(類常量)
2,建立類的對象;
3,使用對象;
使用對象也幾乎只有3個方式:
3.1使用其屬性:因為屬性就是“變數”,則使用其屬性,也就是跟以前使用變數一樣。
3.2使用其方法:因為方法就是“函數”,則使用其方法,也就是跟以前使用函數一樣。
3.3使用其常量:類似使用以前的普通常量。
對象建立的基本形式
方式1:
$對象名1 = new 類名(); //對象名就是變數名;類是應該定義過了
方式2:
方式3:
$對象名3 = new self; //self指代類本身,這行代碼只能在類內部方法中使用。
方式4:通過對象建立對象
new 對象名;//建立該對象所屬類的一個新對象
對象的傳值
回顧:
php中,變數傳值方式有2個:
值傳遞: 傳遞的時候,拷貝的是資料本身。預設都是值傳遞。
結果:傳遞完之後,有了2份同樣的資料,但兩個變數“相互獨立”沒有關係。
引用傳遞: 傳遞的時候,拷貝的是參考關聯性。需要使用“&”才能實現引用傳遞。
結果:傳遞完之後,資料仍然只有一份,但是兩個變數共同指向該資料。
則在物件導向這個層面,基本來說,仍然如此:
預設是值傳遞:
可以使用引用傳遞:
先觀察一個現象:
這是什麼原因?
原來,對象的儲存跟普通變數的儲存有所區別:
普通變數:$s1 = 10;
對於對象(變數):
$obj1 = new P();
則物件變數複製的時候,值傳遞就變成這樣:
$obj2 = $obj1; //值傳遞
可見,物件變數進行普通傳值的時候,複製的是物件變數中所儲存的“物件識別碼”
那麼,我們斷開$p1跟其儲存的資料(標識符)之間的關係,結果是:$p2還有效:
可見$p1和$p2之間是值傳遞。
再來對比看看引用傳遞:
類與對象