PHP從入門到精通
之PHP的面相對象編程
面向對象編程(Object Oriented Programming, OOP, 面向對象程序設計)是一種計算機編程架構,OOP的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。為了實現整體運算,每個對象都能夠接收信息、處理數據和向其它對象發送信息。面向對象一直是軟件開發領域內比較熱門的話 題,為編程人員敞開了一扇大門,使其編程的代碼 更簡潔、更易於維護,並且具有更強的可重用性。有人說PHP不是一個真正的面向對象的語言,這是事實。PHP 是一個混合型語言,你可以使用OOP,也可以使用傳統的過程化編程。然而,對於大型項目,你可能需要在PHP 中使用純的OOP去聲明類,而且在你的項目里只用對象和類。
首先我們來了解一些面向對象編程的基礎知識:
面向過程和面向對象 |
1、面向過程:專注於解決一個問題的過程。面向過程的最大特點,是由一個個的函數去解決處理這個問題的一系列過程;
2、面向對象:專注於由哪個對象來處理一個問題。面向對象的最大特點,是由一個個具有屬性和方法的功能的類,從類中拿對象,進而處理問題;
面向對象:
1、什么是類?
具有相同屬性(特征)和方法(行為)的一系列個體的集合。類是一個抽象的概念。
2、什么是對象?
從類中拿到的具有具體屬性的個體,稱為對象。對象是一個具體的個體。
3、類和對象的關系?
類是對象的抽象化,對象是類的具體化。
類僅僅表明這類對象有哪些屬性。但是不能有具體的值,所以類是抽象的。
而對象,是將類所有屬性賦值后,產生具體的個體,所以對象是具體的。
類的聲明與實例化 |
1、如何聲明一個類?
class 類名{
訪問修飾符 $屬性;
[訪問修飾符] function 方法(){};
}
2、聲明一個類的注意事項?
①類名只能有字母數字下划線組成,開頭不能是數字,必須符合大駝峰法則;
②類名必須使用class修飾,類名后面一定不能有();
③屬性必須帶訪問修飾符;方法可以不帶訪問修飾符;
3、實例化對象及對象屬性方法的調用:
$對象名=new 類名();//()可帶可不帶;
類外部調用屬性和方法:
$對象名->屬性名;//使用->調用屬性時,屬性名不能帶$符號!!
類內部調用屬性和方法:
$this->屬性名;
聲明類的代碼示例:
class Person{ var $name; function Person($name){ $this->name=$name; } }
類中常見的修飾符 |
常見的訪問修飾符有:public、protected、private、var等。
用法如下:
class Person{
public $name; public function Person($name){ $this->name=$name; } }
構造函數 |
1、什么是構造函數?
構造函數是類中的一個特殊函數,當我們使用new關鍵字實例化對象時,相當於調用了類的構造函數;
2、構造函數有什么作用?
實例化對象時,自動調用,用於給對象的屬性賦初值;
3、構造函數的寫法?
①構造函數名必須與類同名:
[public]function Person(){
$this->name=$name
}
②使用魔術方法
4、構造函數注意事項?
①第一種寫法,構造函數名,必須與類同名!!!
②如果一個類沒有手寫構造函數,則系統默認會有一個空參構造,因此可以使用new Person();
如果我們寫進了帶參數的構造函數,則將不再有空參構造,也就是不能直接使用new Person();
Person后面的()中的參數列表,必須符合構造函數的要求!!(即為形參實參問題);
③如果兩種構造函數同時存在,將使用魔術方法__construct。
5、析構函數:__destruct():
①析構函數在對象被銷毀釋放之前自動調用;
②析構函數不能帶有任何參數;
③析構函數常用於對象使用完以后,釋放資源,關閉資源等;
6、什么是魔術方法?
PHP中給我們提供了一系列__開頭的函數,這些函數無需手動調用,會在合適的時機自動調用,這類函數稱為魔術函數(方法);
例如:
function __construct(){}// 在類new一個對象時自動調用; function __destruct(){}// 在對象被銷毀時時自動調用;
因此,為避免重復,我們要求,除了魔術方法之外,自定義函數與方法不能__開頭;
最后,一般對於功能比較復雜的類,我們會單獨的寫到一個類文件中。
類文件的命名,統一小寫,使用"類名.class.php"的方式命名。
在其他文件中使用這個類時,使用include導入這個.class.php文件。
代碼如下:
<?php header ("Content-Type:text/html; charset=utf-8"); class Person{ var $name; /*function Person($name){ $this->name=$name; }*/ //魔術方法(此為官方推薦用法) function __construct($name){ $this->name=$name; } public function say(){ echo "我叫".$this->name."!</br>"; } function __destruct(){ echo "Ah! 張三 is die!"; } } include "person.class.php"; $zhangsan=new Person("zhangsan"); $zhangsan->say();
關於PHP面向對象編程的基礎知識就就到這里,想學習更多的PHPOOP知識,歡迎關注我的技術博客,我們下期再見。覺得內容不錯的小伙伴請點推薦,歡迎大家在評論下方評論區與博主互動,謝謝大家!
未完,待續。。。
更多精彩內容,敬請關注 Q的前端世界的技術博客,內容持續更新。