2021-PHP面試題大全-物件導向

MC811-MM118發表於2021-05-20

1、什麼是物件導向?(理解著回答)
物件導向是一種思想,是基於程式導向而言的,就是說物件導向是將功能等通過物件來實現,將功能封裝進物件之中,讓物件去實現具體的細節。

物件導向有三大特徵:封裝性、繼承性、多型性。

現在純正的OO語言主要是 Java 和 C#,PHP、C++也支援OO,C是程式導向的。

2、簡述 private、 protected、 public修飾符的訪問許可權。
private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。

3、堆和棧的區別?
棧是編譯期間就分配好的記憶體空間,因此你的程式碼中必須就棧的大小有明確的定義;

堆是程式執行期間動態分配的記憶體空間,你可以根據程式的執行情況確定要分配的堆記憶體的大小。

4、XML 與 HTML 的主要區別
語法要求不同:
(1)在html中不區分大小寫,在xml中嚴格區分。
(2)在HTML中,有時不嚴格,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你可以省略
或者之類的結束標記。在XML中,是嚴格的樹狀結構,絕對不能省略掉結束標記。
(3) 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個/ 字元作為結尾。這樣分析器就知道不用查詢結束標記了。
(4)在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
(5)在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。
(6) 在XML文件中,空白部分不會被解析器自動刪除;但是html是過濾掉空格的。

標記不同:
(1)html使用固有的標記;而xml沒有固有的標記。
(2)Html標籤是預定義的;XML標籤是免費的、自定義的、可擴充套件的。

作用不同:
(1)html是用來顯示資料的;xml是用來描述資料、存放資料的,所以可以作為持久化的介質!Html將資料和顯示結合在一起,在頁面中把這資料顯示出來;xml則將資料和顯示分開。 XML被設計用來描述資料,其焦點是資料的內容。HTML被設計用來顯示資料,其焦點是資料的外觀。
(2)xml不是HTML的替代品,xml和html是兩種不同用途的語言。 XML 不是要替換 HTML;實際上XML 可以視作對 HTML 的補充。XML 和HTML 的目標不同HTML 的設計目標是顯示資料並集中於資料外觀,而XML的設計目標是描述資料並集中於資料的內容。
(3)對於XML最好的形容可能是: XML是一種跨平臺的,與軟、硬體無關的,處理與傳輸資訊的工具。
(4)XML未來將會無所不在。XML將成為最普遍的資料處理和資料傳輸的工具。

5、物件導向的特徵有哪些方面?
主要有封裝,繼承,多型。如果是4個方面則加上:抽象。
封裝:
封裝是保證軟體部件具有優良的模組性的基礎,封裝的目標就是要實現軟體部件的高內聚,低耦合,防止程式相互依賴性而帶來的變動影響.
繼承:
在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並可以加入若干新的內容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動共享父類資料和方法的機制,這是類之間的一種關係,提高了軟體的可重用性和可擴充套件性。
多型:
多型是指程式中定義的引用變數所指向的具體型別和通過該引用變數發出的方法呼叫在程式設計時並不確定,而是在程式執行期間才確定,即一個引用變數倒底會指向哪個類的例項物件,該引用變數發出的方法呼叫到底是哪個類中實現的方法,必須在由程式執行期間才能決定。
抽象:
抽象就是找出一些事物的相似和共性之處,然後將這些事物歸為一個類,這個類只考慮這些事物的相似和共性之處,並且會忽略與當前主題和目標無關的那些方面,將注意力集中在與當前目標有關的方面。例如,看到一隻螞蟻和大象,你能夠想象出它們的相同之處,那就是抽象。

6、抽象類和介面的概念以及區別?
抽象類:它是一種特殊的,不能被例項化的類,只能作為其他類的父類使用。使用abstract關鍵字宣告。
介面:它是一種特殊的抽象類,也是一個特殊的類,使用interface宣告。
區別:
(1)抽象類的操作通過繼承關鍵字extends實現,而介面的使用是通過implements關鍵字來實現。
(2)抽象類中有資料成員,可以實現資料的封裝,但是介面沒有資料成員。
(3)抽象類中可以有構造方法,但是介面沒有構造方法。
(4)抽象類的方法可以通過private、protected、public關鍵字修飾(抽象方法不能是private),而介面中的方法只能使用public關鍵字修飾。
(5)一個類只能繼承於一個抽象類,而一個類可以同時實現多個介面。
(6)抽象類中可以有成員方法的實現程式碼,而介面中不可以有成員方法的實現程式碼。

7、什麼是建構函式,什麼是解構函式,作用是什麼?
建構函式(方法)是物件建立完成後第一個被物件自動呼叫的方法。它存在於每個宣告的類中,是一個特殊的成員方法。作用是執行一些初始化的任務。Php中使用__construct()宣告構造方法,並且只能宣告一個。
解構函式(方法)作用和構造方法正好相反,是物件被銷燬之前最後一個被物件自動呼叫的方法。是PHP5中新新增的內容作用是用於實現在銷燬一個物件之前執行一些特定的操作,諸如關閉檔案和釋放記憶體等。

8、如何過載父類的方法,舉例說明
過載,即覆蓋父類的方法,也就是使用子類中的方法替換從父類中繼承的方法,也叫方法的重寫。
覆蓋父類方法的關鍵是在子類中建立於父類中相同的方法包括方法的名稱、引數和返回值型別。PHP中只要求方法的名稱相同即可。

9、常用的魔術方法有哪些?舉例說明
php規定以兩個下劃線()開頭的方法都保留為魔術方法,所以建議大家函式名最好不用開頭,除非是為了過載已有的魔術方法。
__construct() 例項化類時自動呼叫。
__destruct() 類物件使用結束時自動呼叫。
__set() 在給未定義的屬性賦值的時候呼叫。
__get() 呼叫未定義的屬性時候呼叫。
__isset() 使用isset()或empty()函式時候會呼叫。
__unset() 使用unset()時候會呼叫。
__sleep() 使用serialize序列化時候呼叫。
__wakeup() 使用unserialize反序列化的時候呼叫。
__call() 呼叫一個不存在的方法的時候呼叫。
__callStatic()呼叫一個不存在的靜態方法是呼叫。
__toString() 把物件轉換成字串的時候會呼叫。比如 echo。
__invoke() 當嘗試把物件當方法呼叫時呼叫。
__set_state() 當使用var_export()函式時候呼叫。接受一個陣列引數。
__clone() 當使用clone複製一個物件時候呼叫。

10、$this和self、parent這三個關鍵詞分別代表什麼?在哪些場合下使用?
$this 當前物件
self 當前類
parent 當前類的父類
$this在當前類中使用,使用->呼叫屬性和方法。
self也在當前類中使用,不過需要使用::呼叫。
parent在類中使用。

11、類中如何定義常量、如何類中呼叫常量、如何在類外呼叫常量。
類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。
定義常量使用關鍵字const.
例如:const PI = 3.1415326;
無論是類內還是類外,常量的訪問和變數是不一樣的,常量不需要例項化物件,
訪問常量的格式都是類名加作用域操作符號(雙冒號)來呼叫。
即:類名 :: 類常量名;

12、作用域操作符::如何使用?都在哪些場合下使用?
(1)呼叫類常量
(2)呼叫靜態方法(使用static修飾的類方法)

13、autoload()方法的工作原理是什麼?
使用這個魔術函式的基本條件是類檔案的檔名要和類的名字保持一致。
當程式執行到例項化某個類的時候,如果在例項化前沒有引入這個類檔案,那麼就自動執行
autoload()函式。
這個函式會根據例項化的類的名稱來查詢這個類檔案的路徑,當判斷這個類檔案路徑下確實存在這個類檔案後
執行include或者require來載入該類,然後程式繼續執行,如果這個路徑下不存在該檔案時就提示錯誤。
使用自動載入的魔術函式可以不必要寫很多個include或者require函式。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
如果覺得我寫的不錯,記得和我交流,其實我也有很多不懂,嘻嘻!

相關文章