摘要:封裝是面向對象的特征之一,是對象和類概念的主要特性。通過這種方式,對象對內部數據提供了不同級別的保護,以防止程序中無關的部分意外的改變或錯誤的使用了對象的私有部分。構造函數通常被用來自動執行很多初始化操作。
之前的相關問題
面向對象和面向過程的差別,各自的優缺點
面向對象有哪些基本特性?各自特性帶來哪些好處
面向對象的基本語法?
面向對象的基本特性的基本實現
面向對象結合各種設計模式的使用
面向對象的優勢易維護、易復用、易擴展,由于面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易于維護
面向對象的三大特性封裝:也就是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。封裝是面向對象的特征之一,是對象和類概念的主要特性。 簡單的說,一個類就是一個封裝了數據以及操作這些數據的代碼的邏輯實體。在一個對象內部,某些代碼或某些數據可以是私有的,不能被外界訪問。通過這種方式,對象對內部數據提供了不同級別的保護,以防止程序中無關的部分意外的改變或錯誤的使用了對象的私有部分。
繼承:是可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。它支持按級分類的概念。在 OOP中,繼承的概念很好的支持了代碼的重用性(reusability),也就是說,我們可以向一個已經存在的類中添加新的特性,而不必改變這個類。這可以通過從這個已存在的類派生一個新類來實現。這個新的類將具有原來那個類的特性,以及新的特性。而繼承機制的魅力和強大就在于它允許程序員利用已經存在的類(接近需要,而不是完全符合需要的類),并且可以以某種方式修改這個類,而不會影響其它的東西
多態:多態就是指一個類實例的相同方法在不同情形有不同表現形式。多態機制使具有不同內部結構的對象可以共享相同的外部接口。這意味著,雖然針對不同對象的具體操作不同,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以調用
PHP面向對象的基本語法聲明一個類:
使用一個class關鍵字,提供一個類的名字,然后列出這個累的實例應該具備的方法和屬性
class MyClass{ ... //屬性列表 ... //方法列表 }
new關鍵字和構造函數
類的實例使用new關鍵字創建。
$zhangsan = new Person();
上面的代碼創建了Person類的實例,當調用new的時候PHP會分配一個新的對象,并且從你定義的類中拷貝屬性和方法,然后如果你定義了對象的構造函數的話,它會被自動調用,它在new關鍵字創建一個對象后自動裕興。構造函數通常被用來自動執行很多初始化操作。構造函數也接收參數
使用$this變量訪問方法和屬性
在對象的方法執行時,PHP會自動定義一個叫$this的特殊變量,他表示一個對對象本身的引用
$this->name; //訪問$name非靜態屬性(注意別在屬性的名字前面加$符號) $this->getName(); //調用類的非靜態方法
public,protected和private屬性和方法
靜態屬性
靜態屬性和常規屬性不一樣,靜態屬性屬于類本身而不屬于類的任何勢力。靜態屬性使用static關鍵字定義。
訪問一個靜態屬性:使用類名或者使用特殊的類名self來訪問它,self是一個方法所屬的類的縮寫。
print MyClass::$staticName; print self::$staticName; //在類的方法中調用
靜態方法
靜態方法是類的一部分,不屬于類的任何實例。靜態方法中不能使用任何$this,因為靜態方法跟實例無關。
class_name::method(); self::method();
類的常量
與靜態成員相似,它們屬于類本身而不屬于類的實例。類的常量對大小寫敏感。
class MyClass{ const RED = "red"; function color(){ return self::RED; } } print MyClass::RED; $obj = new MyClass(); $obj->color();
多態
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());
上面的例子是不可以擴展的,想增加第三個動物聲音時,不得不在makeSound()函數中增加esleif語句。可以使用多態解決這個問題
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
如果類中定義了抽象方法,那么這個類必須定義為抽象類,抽象類中的抽象函數沒有被實現,所以不是一個完整的類,所以不能實例化抽象類的。
如果一個類繼承了抽象類,那么這個類必須實現抽象類的抽象方法
接口 interface
interface Loggable{ function logString(); function logErr(); }
接口中的方法都是abstract的,就是說其中的方法都沒有實現
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30608.html
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:一面向對象編程基礎實踐通過對象的編程方式,可將實現生活中的一切事物以對象的形式表現出來。此時程序也將會報致命錯誤。屬性不可訪問或未定義,值判斷對象中的屬性不存在時,自動執行該函數。屬性值未定義釋放對象中的不存在的屬性值時,自動執行該函數。 一、PHP面向對象編程基礎實踐 二、PHP面向對象高級編程實踐 知識點:類的繼承、方法重寫、訪問控制、static關鍵字、final關鍵字、數據訪...
摘要:一面向對象的概念什么是面向對象世間萬物皆對象,抽象的也是對象,一切可見或不可見都是對象對象的基本組成對象包含兩個部分對象的組成元素是對象的數據模型,用于描述對象的數據又稱為對象的屬性,或者對象的成員變量對象的行為是對象的行為模型,用于描述對 一、面向對象的概念 1.1 什么是面向對象(object oriented) ?????世間萬物皆對象,抽象的也是對象,一切可見或不可見都是對象 ...
摘要:具有構造函數的類會在每次創建新對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作。類的定義以關鍵字開始,類的命名通常以每個單詞第一個字母大寫定義屬性構造函數,在對象被實例化的時候自動調用是里面的偽變量,表示對象自身。 public 公有的:本類,子類,外部對象都可以調用 protected 受保護的:本類 子類,可以執行,外部對象不可以調用 private 私有的:只能...
閱讀 3607·2021-11-23 09:51
閱讀 2813·2021-11-23 09:51
閱讀 691·2021-10-11 10:59
閱讀 1687·2021-09-08 10:43
閱讀 3241·2021-09-08 09:36
閱讀 3304·2021-09-03 10:30
閱讀 3308·2021-08-21 14:08
閱讀 2213·2021-08-05 09:59