摘要:封裝是面向?qū)ο蟮奶卣髦唬菍?duì)象和類概念的主要特性。通過這種方式,對(duì)象對(duì)內(nèi)部數(shù)據(jù)提供了不同級(jí)別的保護(hù),以防止程序中無關(guān)的部分意外的改變或錯(cuò)誤的使用了對(duì)象的私有部分。構(gòu)造函數(shù)通常被用來自動(dòng)執(zhí)行很多初始化操作。
之前的相關(guān)問題
面向?qū)ο蠛兔嫦蜻^程的差別,各自的優(yōu)缺點(diǎn)
面向?qū)ο笥心男┗咎匦裕扛髯蕴匦詭砟男┖锰?/p>
面向?qū)ο蟮幕菊Z法?
面向?qū)ο蟮幕咎匦缘幕緦?shí)現(xiàn)
面向?qū)ο蠼Y(jié)合各種設(shè)計(jì)模式的使用
面向?qū)ο蟮膬?yōu)勢易維護(hù)、易復(fù)用、易擴(kuò)展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計(jì)出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護(hù)
面向?qū)ο蟮娜筇匦?/b>封裝:也就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏。封裝是面向?qū)ο蟮奶卣髦唬菍?duì)象和類概念的主要特性。 簡單的說,一個(gè)類就是一個(gè)封裝了數(shù)據(jù)以及操作這些數(shù)據(jù)的代碼的邏輯實(shí)體。在一個(gè)對(duì)象內(nèi)部,某些代碼或某些數(shù)據(jù)可以是私有的,不能被外界訪問。通過這種方式,對(duì)象對(duì)內(nèi)部數(shù)據(jù)提供了不同級(jí)別的保護(hù),以防止程序中無關(guān)的部分意外的改變或錯(cuò)誤的使用了對(duì)象的私有部分。
繼承:是可以讓某個(gè)類型的對(duì)象獲得另一個(gè)類型的對(duì)象的屬性的方法。它支持按級(jí)分類的概念。在 OOP中,繼承的概念很好的支持了代碼的重用性(reusability),也就是說,我們可以向一個(gè)已經(jīng)存在的類中添加新的特性,而不必改變這個(gè)類。這可以通過從這個(gè)已存在的類派生一個(gè)新類來實(shí)現(xiàn)。這個(gè)新的類將具有原來那個(gè)類的特性,以及新的特性。而繼承機(jī)制的魅力和強(qiáng)大就在于它允許程序員利用已經(jīng)存在的類(接近需要,而不是完全符合需要的類),并且可以以某種方式修改這個(gè)類,而不會(huì)影響其它的東西
多態(tài):多態(tài)就是指一個(gè)類實(shí)例的相同方法在不同情形有不同表現(xiàn)形式。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對(duì)象可以共享相同的外部接口。這意味著,雖然針對(duì)不同對(duì)象的具體操作不同,但通過一個(gè)公共的類,它們(那些操作)可以通過相同的方式予以調(diào)用
PHP面向?qū)ο蟮幕菊Z法聲明一個(gè)類:
使用一個(gè)class關(guān)鍵字,提供一個(gè)類的名字,然后列出這個(gè)累的實(shí)例應(yīng)該具備的方法和屬性
class MyClass{ ... //屬性列表 ... //方法列表 }
new關(guān)鍵字和構(gòu)造函數(shù)
類的實(shí)例使用new關(guān)鍵字創(chuàng)建。
$zhangsan = new Person();
上面的代碼創(chuàng)建了Person類的實(shí)例,當(dāng)調(diào)用new的時(shí)候PHP會(huì)分配一個(gè)新的對(duì)象,并且從你定義的類中拷貝屬性和方法,然后如果你定義了對(duì)象的構(gòu)造函數(shù)的話,它會(huì)被自動(dòng)調(diào)用,它在new關(guān)鍵字創(chuàng)建一個(gè)對(duì)象后自動(dòng)裕興。構(gòu)造函數(shù)通常被用來自動(dòng)執(zhí)行很多初始化操作。構(gòu)造函數(shù)也接收參數(shù)
使用$this變量訪問方法和屬性
在對(duì)象的方法執(zhí)行時(shí),PHP會(huì)自動(dòng)定義一個(gè)叫$this的特殊變量,他表示一個(gè)對(duì)對(duì)象本身的引用
$this->name; //訪問$name非靜態(tài)屬性(注意別在屬性的名字前面加$符號(hào)) $this->getName(); //調(diào)用類的非靜態(tài)方法
public,protected和private屬性和方法
靜態(tài)屬性
靜態(tài)屬性和常規(guī)屬性不一樣,靜態(tài)屬性屬于類本身而不屬于類的任何勢力。靜態(tài)屬性使用static關(guān)鍵字定義。
訪問一個(gè)靜態(tài)屬性:使用類名或者使用特殊的類名self來訪問它,self是一個(gè)方法所屬的類的縮寫。
print MyClass::$staticName; print self::$staticName; //在類的方法中調(diào)用
靜態(tài)方法
靜態(tài)方法是類的一部分,不屬于類的任何實(shí)例。靜態(tài)方法中不能使用任何$this,因?yàn)殪o態(tài)方法跟實(shí)例無關(guān)。
class_name::method(); self::method();
類的常量
與靜態(tài)成員相似,它們屬于類本身而不屬于類的實(shí)例。類的常量對(duì)大小寫敏感。
class MyClass{ const RED = "red"; function color(){ return self::RED; } } print MyClass::RED; $obj = new MyClass(); $obj->color();
多態(tài)
class Cat{ public function miau(){ print "miau"; } } class Dog{ public function waff(){ print "waau"; } } function makeSound($obj){ if($obj instanceof Cat){ $obj->miau(); }else if($obj instanceof Dog){ $obj->waff(); }else{ print "Error:Pass wrong kind of object!"; } print " "; } makeSound(new Cat()); makeSound(new Dog());
上面的例子是不可以擴(kuò)展的,想增加第三個(gè)動(dòng)物聲音時(shí),不得不在makeSound()函數(shù)中增加esleif語句。可以使用多態(tài)解決這個(gè)問題
class Animal{ public function makeSound(){ print "Error:should implemented class"; } } class Cat extends Animal{ public function makeSound(){ print "miau"; } } class Dog extends Animal{ public function makeSound(){ print "waau"; } } function makeSound($obj){ if($obj instanceof Animal){ $obj->makeSound(); }else{ print "Error:Pass wrong kind of object!"; } print " "; } makeSound(new Cat()); makeSound(new Dog());
抽象類 abstract
如果類中定義了抽象方法,那么這個(gè)類必須定義為抽象類,抽象類中的抽象函數(shù)沒有被實(shí)現(xiàn),所以不是一個(gè)完整的類,所以不能實(shí)例化抽象類的。
如果一個(gè)類繼承了抽象類,那么這個(gè)類必須實(shí)現(xiàn)抽象類的抽象方法
接口 interface
interface Loggable{ function logString(); function logErr(); }
接口中的方法都是abstract的,就是說其中的方法都沒有實(shí)現(xiàn)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30608.html
摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來。注意中,對(duì)象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來。注意中,對(duì)象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來。注意中,對(duì)象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:一面向?qū)ο缶幊袒A(chǔ)實(shí)踐通過對(duì)象的編程方式,可將實(shí)現(xiàn)生活中的一切事物以對(duì)象的形式表現(xiàn)出來。此時(shí)程序也將會(huì)報(bào)致命錯(cuò)誤。屬性不可訪問或未定義,值判斷對(duì)象中的屬性不存在時(shí),自動(dòng)執(zhí)行該函數(shù)。屬性值未定義釋放對(duì)象中的不存在的屬性值時(shí),自動(dòng)執(zhí)行該函數(shù)。 一、PHP面向?qū)ο缶幊袒A(chǔ)實(shí)踐 二、PHP面向?qū)ο蟾呒?jí)編程實(shí)踐 知識(shí)點(diǎn):類的繼承、方法重寫、訪問控制、static關(guān)鍵字、final關(guān)鍵字、數(shù)據(jù)訪...
摘要:一面向?qū)ο蟮母拍钍裁词敲嫦驅(qū)ο笫篱g萬物皆對(duì)象,抽象的也是對(duì)象,一切可見或不可見都是對(duì)象對(duì)象的基本組成對(duì)象包含兩個(gè)部分對(duì)象的組成元素是對(duì)象的數(shù)據(jù)模型,用于描述對(duì)象的數(shù)據(jù)又稱為對(duì)象的屬性,或者對(duì)象的成員變量對(duì)象的行為是對(duì)象的行為模型,用于描述對(duì) 一、面向?qū)ο蟮母拍?1.1 什么是面向?qū)ο?object oriented) ?????世間萬物皆對(duì)象,抽象的也是對(duì)象,一切可見或不可見都是對(duì)象 ...
摘要:具有構(gòu)造函數(shù)的類會(huì)在每次創(chuàng)建新對(duì)象時(shí)先調(diào)用此方法,所以非常適合在使用對(duì)象之前做一些初始化工作。類的定義以關(guān)鍵字開始,類的命名通常以每個(gè)單詞第一個(gè)字母大寫定義屬性構(gòu)造函數(shù),在對(duì)象被實(shí)例化的時(shí)候自動(dòng)調(diào)用是里面的偽變量,表示對(duì)象自身。 public 公有的:本類,子類,外部對(duì)象都可以調(diào)用 protected 受保護(hù)的:本類 子類,可以執(zhí)行,外部對(duì)象不可以調(diào)用 private 私有的:只能...
閱讀 3593·2021-11-23 09:51
閱讀 2795·2021-11-23 09:51
閱讀 676·2021-10-11 10:59
閱讀 1672·2021-09-08 10:43
閱讀 3223·2021-09-08 09:36
閱讀 3289·2021-09-03 10:30
閱讀 3293·2021-08-21 14:08
閱讀 2195·2021-08-05 09:59