首頁 後端開發 php教程 php面試之物件導向的相關知識介紹

php面試之物件導向的相關知識介紹

Feb 13, 2019 pm 03:20 PM
oop php 物件導向設計模式 面試

這篇文章帶給大家的內容是關於php面試之物件導向的相關知識介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

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

相關推薦:《2019年PHP面試題大匯總(收藏)

整個物件導向文章的架構涉及的內容模組有:

一、物件導向與過程導向有什麼差別?
二、物件導向有什麼特徵?
三、什麼是建構子和析構函式?
四、物件導向的作用域範圍有哪幾種?
五、PHP 中魔術方法有哪些?
六、什麼是物件克隆?
七、this、self和parent的差別是什麼?
八、抽象類別與介面有什麼差別與連結?
九、PHP物件導向的常考面試題講解

關於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 {
        function __construct() {
            print "Base constructor\n";
        }
    }
    class SubClass extends BaseClass {
        function __construct() {
            parent::__construct();
            print "Sub constructor\n";
        }
    }
    // 会调用父类构造函数
    $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{
        function __destruct(){
            echo "对象被销毁,执行析构函数<br>";
        }
    }
    $p=new des(); /* 实例化类 */
    echo "程序开始<br>";
    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面試之物件導向的相關知識介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

說明匹配表達式(PHP 8)及其與開關的不同。 說明匹配表達式(PHP 8)及其與開關的不同。 Apr 06, 2025 am 12:03 AM

在PHP8 中,match表達式是一種新的控制結構,用於根據表達式的值返回不同的結果。 1)它類似於switch語句,但返回值而非執行語句塊。 2)match表達式使用嚴格比較(===),提升了安全性。 3)它避免了switch語句中可能的break遺漏問題,增強了代碼的簡潔性和可讀性。

See all articles