PHP中oop面向对象基础知识(一)
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OOP 基礎(chǔ)知識匯總(一) |
>>>你需要了解以下概念
面向?qū)ο?amp;面向過程概念:
?面向過程:專注于解決一個問題的過程。面向過程的最大特點,是由一個一個的函數(shù)去解決處理這個問題的一系列過程。
?面向?qū)ο?/span>:專注于由哪個對象來處理一個問題。面向?qū)ο蟮淖畲筇攸c,是有一個個具有屬性和功能的類,從類中拿到對象,進(jìn)而處理問題。
【面向?qū)ο蟆?/span>
?1、什么是類?
? ? ?具有相同屬性(特征)和方法(行為)的一系列個體的集合,類是一個抽象的概念
?2、什么是對象?
? ? ?從類中,拿到的具有具體屬性值的個體,稱為對象。對象是一個具體的個體。
? ? ?例如:人類,都有姓名、性別、年齡,但是這些屬性都不能有具體的值。
? ? ? ? ? ? ? 張三,是人類中的一個對象!姓名張三、性別男、年齡23,將類的每一個屬性具體賦值后,就成了張三這個對象。
?3、類和對象的關(guān)系?
? ?類是對象的抽象化!對象是類的具體化!
類僅僅表明這類對象有哪些屬性,但是不能有具體的值,所以類是抽象的。
而對象,是將類的所有屬性賦值后,產(chǎn)生的具體的個體,所有對象是具體的。
類的聲明與實例化:??
1、如何聲明一個類:
? ? ?class 類名{
? ? ? ? ? ? ?訪問修飾符 $屬性[=默認(rèn)值];
? ? ? ? ? ? ?[訪問修飾符] function 方法(){}
? ? ? }
? ? ?
2、聲明一個類的注意事項:
① 類名只能有字母數(shù)字下劃線組成、開頭不能是數(shù)字,必須符合大駝峰法則;
② 類名必須使用class修飾,類名后面一定不能有();
③ 屬性必須要帶訪問修飾符,方法可以不帶訪問修飾符;
3、實例化對象及對象屬性方法的調(diào)用?
? $對象名 = new 類名(); //()可以不帶
類外部調(diào)用屬性和方法:
?$對象名 -> 屬性名; // 使用->調(diào)用屬性時,屬性名不能帶$
類內(nèi)部調(diào)用屬性和方法:
$this -> 屬性名;
構(gòu)造函數(shù):
1、什么是構(gòu)造函數(shù)?
??構(gòu)造函數(shù)是類中的一個特殊函數(shù),當(dāng)我們使用new關(guān)鍵字實例化對象時,相當(dāng)于調(diào)用了類的構(gòu)造函數(shù);
2、構(gòu)造函數(shù)有什么作用?
? ? ?實例化對象時,自動調(diào)用,用于給對象的屬性賦初值!
3、構(gòu)造函數(shù)的寫法?
? ? ① 構(gòu)造函數(shù)名,必須與類同名
? ? [public] function Person($name){
? ? ? ? $this -> name = $name;
? ? }
? ? ② 使用魔術(shù)方法__construct
? ? ? ? [public] function __construct($name=""){
? ? ? ? $this -> name = $name;
? ? }
?4、構(gòu)造函數(shù)注意事項:
?① 第一種寫法,構(gòu)造函數(shù)名必須與類同名!!!!!!
② 如果一個類沒有手寫構(gòu)造函數(shù),則系統(tǒng)默認(rèn)會有一個空參構(gòu)造,因此可以使用new Person();
? ? ?如果我們寫了帶參數(shù)的構(gòu)造函數(shù),則將不會再有空參構(gòu)造,也就是不能直接使用new Person(); Person后面的()中的參數(shù)列表,必須符合構(gòu)造函數(shù)的要求!!!
? ③ 如果兩種構(gòu)造函數(shù)同時存在,將使用__construct。
?5、析構(gòu)函數(shù):__destruct():
? ? ?① 析構(gòu)函數(shù)在對象被銷毀釋放之前自動調(diào)用!
? ? ?② 析構(gòu)函數(shù)不能帶有任何的參數(shù)
? ? ?③ 析構(gòu)函數(shù)常用于對象使用完以后,釋放資源、關(guān)閉資源等!
6、魔術(shù)方法:
? ? ?PHP中,給我們提供一系列用__開頭的函數(shù),這些函數(shù)無需自己手動調(diào)用,會在合適的時機(jī)自動調(diào)用,這類函數(shù)稱為魔術(shù)函數(shù)。
? ? 例如:function __construct(){} 在類new一個對象時自動調(diào)用
? ? function __destruct(){} 在對象被銷毀時自動調(diào)用
? ?我們要求,除了魔術(shù)方法之外,自定義的函數(shù)與方法不能使用__開頭。
? ? 最后,一般對于功能比較復(fù)雜的類,我們會單獨的寫到一個類文件中。
? ? 類文件的命名,統(tǒng)一小寫,使用“類名小寫.class.php”的方式命名。
? ? 在其他文件中使用這個類時,可以用include導(dǎo)入這個.class.php文件
封裝的基本概念
?1、什么是封裝?
通過訪問修飾符,將類中不需要外部訪問的屬性和方法進(jìn)行私有化處理,以實現(xiàn)訪問控制。
?注意:是實現(xiàn)訪問控制,而不是拒絕訪問。 也就是說,我們私有化屬性之后,需要提供對應(yīng)的方法,讓用戶通過我們提供的方法處理屬性。
?2、封裝的作用?
?① 使用者只關(guān)心類能夠提供的功能,而不必關(guān)心功能實現(xiàn)的細(xì)節(jié)!(封裝方法)
?② 對用戶的數(shù)據(jù)進(jìn)行控制,防止設(shè)置不合法數(shù)據(jù),控制返回給用戶的數(shù)據(jù)(屬性封裝+set/get方法)
?3、實現(xiàn)封裝操作?
?① 方法的封裝
??對于一些只在類內(nèi)部使用的方法,而不像對外部提供使用。那么,這樣的方法我們可以使用private進(jìn)行私有化處理。
private function formatName(){} //這個方法僅僅能在類內(nèi)部使用$this調(diào)用
function showName(){
$this -> formatName();
? ? ? ? ? }
② 屬性的封裝+set/get方法? 為了控制屬性的設(shè)置以及讀取,可以將屬性進(jìn)行私有化處理,并要求用戶通過我們提供的set/get方法進(jìn)行設(shè)置
?private $age;
?function setAge($age){
? ? ?$this->age = $age;
? }
? function getAge(){
? ? ?return $this->age;
? }
?$對象 -> getAge();
?$對象 -> setAge(12);
③ 屬性的封裝+魔術(shù)方法
?private $age;
function __get($key){
? ? ?return $this->$key;
?}
?function __set($key,$value){
? ? ? $this->$key=$value;
}
?$對象->age; // 訪問對象私有屬性時,自動調(diào)用__get()魔術(shù)方法,并且將訪問的屬性名傳給__get()方法;
?$對象->age=12; // 設(shè)置對象私有屬性時,自動調(diào)用__set()魔術(shù)方法,并且將設(shè)置的屬性名以及屬性值傳給__set()方法;
?注意:在魔術(shù)方法中,可以使用分支結(jié)構(gòu),判斷$key的不同,進(jìn)行不同操作。
4、關(guān)于封裝的魔術(shù)方法:
?① __set($key,$value):給類私有屬性賦值時自動調(diào)用,調(diào)用時給方法傳遞兩個參數(shù):需要設(shè)置的屬性名、屬性值;
?② __get($key):讀取類私有屬性時自動調(diào)用,調(diào)用時給方法傳遞一個參數(shù):需要讀取的屬性名;
?③ __isset($key):外部使用isset()函數(shù)檢測私有屬性時,自動調(diào)用。
?>>> 類外部使用isset();檢測私有屬性,默認(rèn)是檢測不到的。false
? >>> 所以,我們可以使用__isset();函數(shù),在自動調(diào)用時,返回內(nèi)部檢測結(jié)果。
? function __isset($key){
???return isset($this->$key);
? }
?當(dāng)外部使用isset($對象名->私有屬性);檢測時,將自動調(diào)用上述__isset()返回的結(jié)果!
?④ __unset($key):外部使用unset()函數(shù)刪除私有屬性時,自動調(diào)用;
? function __unset($key){
? unset($this->$key);
? ? }
?當(dāng)外部使用unset($對象名->私有屬性);刪除屬性時,自動將屬性名傳給__unset(),并交由這個魔術(shù)方法處理。
未完待續(xù) ? 》》》》》》
?
?
?
??
轉(zhuǎn)載于:https://www.cnblogs.com/GlenLi/p/6986934.html
總結(jié)
以上是生活随笔為你收集整理的PHP中oop面向对象基础知识(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派设置NTP同步
- 下一篇: Oracle笔记之表空间