PHP面試常考內容之物件導向(1)

2022-07-21 22:54:28 字數 4896 閱讀 4439

php中物件導向常考的知識點有以下幾點,我將會從以下幾點進行詳細介紹說明,幫助你更好的應對php面試常考的物件導向相關的知識點和考題。

一、物件導向與面向過程有什麼區別?

二、物件導向有什麼特徵?

三、什麼是建構函式和析構函式?

四、物件導向的作用域範圍有哪幾種?

五、php 中魔術方法有哪些?

六、什麼是物件轉殖?

七、this、self和parent的區別是什麼?

八、抽象類與介面有什麼區別與聯絡?

九、php物件導向的常考面試題講解

關於php物件導向的內容將會被分為三篇文章進行講解完整塊內容,第一篇主要講解一到四點內容,第二篇主要講解五到八的內容,第三篇圍繞第九點進行講解。

一、物件導向與面向過程有什麼區別?

物件導向是當今軟體開發方法的主流方法之一,它是把資料及對資料的操作方法放在一起,作為乙個相互依存的整體,即物件。對同類物件抽象出其共性,即類,類中的大多數資料,只能被本類的方法進行處理。類通過乙個簡單的外部介面與外界發生關係,物件與物件之間通過訊息進行通訊。程式流程由使用者在使用中決定。例如,站在抽象的角度,人類具有身高、體重、年齡、血型等一些特稱,人類會勞動、會直立行走、會吃飯、會用自己的頭腦去創造工具等這些方法,人類僅僅只是乙個抽象的概念,它是不存在的實體,但是所有具備人類這個群體的屬性與方法的物件都稱為人,這個物件人是實際存在的實體,每個人都是人這個群體的乙個物件。

而面向過程是一種以事件為中心的開發方法,就是自頂向下順序執行,逐步求精,其程式結構是按功能劃分為若干個基本模組,這些模組形成乙個樹狀結構,各模組之間的關係也比較簡單,在功能上相對獨立,每一模組內部一般都是由順序、選擇和迴圈三種基本結構組成,其模組化實現的具體方法是使用子程式,而程式流程在寫程式時就已經決定。例如五子棋,面向過程的設計思路就是首先分析問題的步驟:第一步,開始遊戲;第二步,黑子先走;第三步,繪製畫面;第四步,判斷輸贏;第五步,輪到白子;第六步,繪製畫面;第七步,判斷輸贏;第八步,返回步驟二;第九步,輸出最後結果。把上面每個步驟用分別的函式來實現,就是乙個面向過程的開發方法。

具體而言,二者主要有以下幾個方面的不同之處。

1)出發點不同。物件導向是用符合常規思維方式來處理客觀世界的問題,強調把問題域的要領直接對映到物件及物件之間的介面上。而面向過程方法則不然,它強調的是過程的抽象化與模組化,它是以過程為中心構造或處理客觀世界問題的。

2)層次邏輯關係不同。物件導向方法則是用計算機邏輯來模擬客觀世界中的物理存在,以物件的集合類作為處理問題的基本單位,盡可能地使計算機世界向客觀世界靠攏,以使問題的處理更清晰直接,物件導向方法是用類的層次結構來體現類之間的繼承和發展。面向過程方法處理問題的基本單位是能清晰準確地表達過程的模組,用模組的層次結構概括模組或模組間的關係與功能,把客觀世界的問題抽象成計算機可以處理的過程。

3)資料處理方式與控制程式方式不同。物件導向方法將資料與對應的**封裝成乙個整體,原則上其他物件不能直接修改其資料,即物件的修改只能由自身的成員函式完成,控制程式方式上是通過「事件驅動」來啟用和執行程式。而面向過程方法是直接通過程式來處理資料,處理完畢後即可顯示處理結果,在控制程式方式上是按照設計呼叫或返回程式,不能自由導航,各模組之間存在著控制與被控制、呼叫與被呼叫。

4)分析設計與編碼轉換方式不同。物件導向方法貫穿軟體生命週期的分析、設計及編碼之間是一種平滑過程,從分析到設計再到編碼是採用一致性的模型表示,即實現的是一種無縫連線。而面向過程方法強調分析、設計及編碼之間按規則進行轉換,貫穿軟體生命週期的分析、設計及編碼之間,實現的是一種有縫的連線。

二、物件導向有什麼特徵?

物件導向的主要特徵有抽象、繼承、封裝和多型。

1)抽象。抽象就是忽略乙個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。

2)繼承。繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的乙個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且子類可以修改或增加新的方法使之更適合特殊的需要。

3)封裝。封裝是指將客觀事物抽象成類,每個類對自身的資料和方法實行保護。類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的資訊進行隱藏。

4)多型。多型是指允許不同類的物件對同一訊息做出響應。多型包括引數化多型和包含多型。多型性語言具有靈活、抽象、行為共享、**共享的優勢,很好地解決了應用程式函式同名問題。

三、什麼是建構函式和析構函式?

1.建構函式

在php5之前的版本,建構函式的名字必須與類的名字相同,而從php5開始,開發者可以定義乙個名為__construct的方法作為建構函式。建構函式的作用就是當類被例項化的時候會被自動呼叫,因此建構函式主要用於做一些初始化的工作。使用__construct作為建構函式名字的乙個好處是,當類名修改的時候,不需要修改建構函式的名字。它的宣告形式為

void __construct ([ mixed

$args [, $... ]] )

在c++語言中,子類的建構函式會隱式地呼叫父類的無引數的建構函式。但是在php中,子類的建構函式不會隱式地去呼叫父類的建構函式,需要開發者通過parent::__construct()來顯式地去呼叫父類的建構函式。當子類沒有定義建構函式的時候,它會繼承父類的建構函式,但前提是父類的建構函式不能被定義為private。使用示例如下:

<?php 

class

baseclass

}class subclass extends

baseclass

}//會呼叫父類建構函式

$obj = new

baseclass();

//呼叫子類建構函式,子類建構函式會去呼叫父類建構函式

$obj = new

subclass();

?>

程式的執行結果為

base constructor 

base constructor

sub constructor

從上面的講解中可以發現,從php5開始多了一種建構函式定義的方法。為了實現不同版本php**的相容,在php5的類中找不到 __construct() 函式並且也沒有從父類繼承乙個的話,那麼它就會嘗試尋找舊式的建構函式(與類同名的函式)。這種相容的方法存在乙個風險:在php5之前的版本中開發的類中已有乙個名為 __construct() 的方法卻被用於其他用途時,php5的類會認為這是乙個建構函式,從而當類例項化時自動執行這個方法。

從 php 5.3.3 開始,在命名空間中,與類名同名的方法不再作為建構函式。這一改變不影響不在命名空間中的類。

2.析構函式

析構函式是在php5引入的,它的作用與呼叫時機和建構函式剛好相反,它在物件被銷毀時自動執行。析構函式__destruct()結構形式如下:

function

__destruct()

需要注意的是,析構函式是由系統自動呼叫的,因此,它不需要引數。

預設情況下,系統僅釋放物件屬性所占用的記憶體,並不銷毀在物件內部申請的資源(例如,開啟檔案、建立資料庫的連線等),而利用析構函式在使用乙個物件之後執行**來清除這些在物件內部申請的資源(關閉檔案、斷開與資料庫的連線)。

與建構函式類似,如果想在子類中呼叫父類的析構函式,那麼需要顯式地呼叫:parent::__destruct()。如果子類沒有定義析構函式,那麼它會繼承父類的析構函式。

當物件不再被引用時,將呼叫析構函式。如果要明確地銷毀乙個物件,那麼可以給指向物件的變數不分配任何值,通常將變數賦值為null或者用unset()函式。示例**如下:

<?php 

class

des }

$p=new des(); /*

例項化類

*/echo "程式開始

";

unset($p); /*

銷毀變數$p

*/echo "程式結束";

?>

四、物件導向的作用域範圍有哪幾種?在php5中,類的屬性或者方法主要有public、protected和private三種類作用域,它們的區別如下:

1)public(公有型別)表示全域性,類內部、外部和子類都可以訪問。

預設的訪問許可權為public,也就是說,如果乙個方法沒有被public、protected或private修飾,那麼它預設的作用域為public。

2)protected(受保護型別)表示受保護的,只有本類或子類可以訪問。

在子類中,可以通過self::var或self::method訪問,也可以通過parent::method來呼叫父類中的方法。

在類的例項化物件中,不能通過$obj->var來訪問protected型別的方法或屬性。

3)private(私有型別)表示私有的,只有本類內部可以使用。

該型別的屬性或方法只能在該類中使用,在該類的例項、子類、子類的例項中都不能呼叫私有型別的屬性和方法。

預告:php面試常考內容之物件導向(2)將於本周三(2019.2-13)更新。

以上內容摘自《php程式設計師面試筆試寶典》書籍,該書已在天貓、京東、噹噹等電商平台銷售。

軟考之物件導向 關係

摘自 類的關係可以分成 關聯 association 聚合 aggregation 組合 composition 依賴 dependency 和繼承 inheritance 關聯 關聯表示兩個類之間行為的一般二元關係。關聯中的每個類可以指定乙個數目 multiplicity 它可以是乙個數字或數字區...

php之物件導向思想

ooa object oriented analysis 物件導向分析 ood object oriented design 物件導向設計 oop object oriented programing 物件導向過程 物件導向的三大特性 封裝 繼承 多型。記憶體分為 棧空間段,堆空間段,段,初始化靜態...

PHP之物件導向學習

class lio php class lio 類son 繼承 lio class son extends lio 類的例項化 name new son sanmei public能夠訪問 echo name pub protect僅僅在子類中 通過 public function 實現呼叫 pri...