科技知識動態:php面試題中面向對象的題目分析

導讀跟大家講解下有關php面試題中面向對象的題目分析,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說php面試題中面向對象的題目

跟大家講解下有關php面試題中面向對象的題目分析,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說php面試題中面向對象的題目分析,小編也收集到了有關php面試題中面向對象的題目分析的相關資料,希望大家看到了會喜歡。

面向對象是我們學習php必不可少的一部分,很多小伙伴對面向對象都是一知半解的,所以導致很多小伙伴去公司面試的時候,問到php面試題中面向對象的問題就不知道如何是好,在之前的文章我們也介紹php面試題,筆試題,php核心技術題, 今天我們就帶大家來看看這個php面試題中的面向對象的題到底有哪些?

php面試題之面向對象題目1. 寫出 php 的 public、protected、private 三種訪問控制模式的區別(新浪網技術部)

public:公有,任何地方都可以訪問protected:繼承,只能在本類或子類中訪問,在其它地方不允許訪問private:私有,只能在本類中訪問,在其他地方不允許訪問

相關題目:請寫出 PHP5 權限控制修飾符private protected public2. 設計模式考察:請用單態設計模式方法設計類滿足如下需求:請用 PHP5 代碼編寫類實現在每次對數據庫連接的訪問中都只能獲得唯一的一個數據庫連接,具體連接數據庫的詳細代碼忽略,請寫出主要邏輯代碼(新浪網技術部)<?php class Mysql { private static $instance = null; private $conn; // 構造方法,設置為private,不允許通過new獲得對象實例 private function construct(argument) { $conn = mysql_connect("localhost","root","root"); } // 獲取實例方法 public function getInstance() { if (!self::$instance instanceof self) { self::$instance = new self; } return self::$instance; } // 禁止克隆 private function clone(){} } // 獲得對象 $db = Mysql::getInstance();?>3. 寫出下列程序的輸出結果(新浪網技術部)<?php class a { protected $c; public function a() { $this->c = 10; } } class b extends a { public function print_data() { return $this->c; } } $b = new b(); echo $b->print_data();?>

輸出結果 10

[!]4. PHP5 中魔術方法函數有哪幾個,請舉例說明各自的用法 (騰訊 PHP 工程師筆試題)

sleep serialize 之前被調用wakeup unserialize 時被調用toString 打印一個對象時被調用set_state 調用 var_export 時被調用,用set_state的返回值作為 var_export 的返回值construct 構造函數,實例化對象時被調用destruct 析構函數,當對象銷毀時被調用call 對象調用某個方法,若存在該方法,則直接調用,若不存在,則調用call 函數get 讀取一個對象屬性時,若屬性存在,則直接返回,若不存在,則調用get 函數set 設置一個對象的屬性時,若屬性存在,則直接賦值,若不存在,則調用set 函數isset 檢測一個對象的屬性是否存在時被調用unset unset 一個對象的屬性時被調用clone 克隆對象時被調用autoload 實例化一個對象時,如果對應的類不存在,則該方法被調用

相關題目:請寫出 php5 的構造函數和析構函數

構造函數:construct析構函數:destruct

5. 如何使用下面的類,并解釋下面什么意思?<?php class test{ function Get_test($num){ $num = md5(md5($num)."En"); return $num; } } $testObject = new test(); $encryption = $testObject->Get_test("itcast"); echo $encryption;?>

雙重 md5 加密

6. How would you declare a class named “myclass” with no methods or properties?(Yahoo)class myclass{};相關題目:如何聲明一個名為“myclass”的沒有方法和屬性的類?7. How would you create an object, which is an instance of “myclass”? (Yahoo)$obj= new myclass();相關題目:如何實例化一個名為“myclass”的對象?8. How do you access and set properties of a class from within the class?(Yahoo)

使用語句:$this->propertyName,例如:

<?php class mycalss{ private $propertyName; public function construct() { $this->propertyName = "value"; } }?>9. The code below _ because .(騰訊)<?phpclass Foo{?><?php function bar(){ print "bar"; }}?>

A. will work, class definitions can be split up into multiple PHP blocks.B. will not work, class definitions must be in a single PHP block.C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.D. will work, class definitions can be split up into multiple files and multiple PHP blocks.答案: B

10. 類的屬性可以序列化后保存到 session 中,從而以后可以恢復整個類,這要用到的函數是。serialize() 和 unserialize()11. 在 PHP 中,如果派生類與父類有相同名字的函數,則派生類的函數會替換父類的函數,程序結果為<?phpclass A{ function disName(){ echo "Picachu"; }}class B extends A{ var $tmp; function disName(){ echo "Doraemon"; }}$cartoon = New B;$cartoon->disName();?>

A. tmpB. PicachuC. disNameD. DoraemonE. 無輸出答案:D

12. 接口和抽象類的區別是什么?

抽象類是一種不能被實例化的類,只能作為其他類的父類來使用。抽象類是通過關鍵字abstract 來聲明的。抽象類與普通類相似,都包含成員變量和成員方法,兩者的區別在于,抽象類中至少要包含一個抽象方法,抽象方法沒有方法體,該方法天生就是要被子類重寫的。抽象方法的格式為:abstract function abstractMethod();

接口是通過 interface 關鍵字來聲明的,接口中的成員常量和方法都是 public 的,方法可以不寫關鍵字 public,接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。抽象類和接口實現的功能十分相似,最大的不同是接口能實現多繼承。在應用中選擇抽象類還是接口要看具體實現。子類繼承抽象類使用 extends,子類實現接口使用 implements。

13. 類中如何定義常量、如何類中調用常量、如何在類外調用常量。

類中的常量也就是成員常量,常量就是不會改變的量,是一個恒值。定義常量使用關鍵字 const,例如:const PI = 3.1415326;無論是類內還是類外,常量的訪問和變量是不一樣的,常量不需要實例化對象,訪問常量的格式都是類名加作用域操作符號(雙冒號)來調用,即:類名:: 類常量名。

14. autoload()函數是如何運作的?

使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。當程序執行到實例化某個類的時候,如果在實例化前沒有引入這個類文件,那么就自動執行autoload()函數。

這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件后就執行 include 或者 require 來載入該類,然后程序繼續執行,如果這個路徑下不存在該文件時就提示錯誤。

15. 哪種OOP設置模式能讓類在整個腳本里只實例化一次?(奇矩互動)

A. MVCB. 代理模式C. 狀態模式D. 抽象工廠模式E. 單件模式答案:E

16. 借助繼承,我們可以創建其他類的派生類。在PHP中,子類最多可以繼承幾個父類?(奇矩互動)

A. 1個B. 2個C. 取決于系統資源D. 3個E. 想要幾個有幾個答案:A

17. 執行以下代碼,輸出結果是(奇矩互動)<?php abstract class a{ function construct() { echo "a"; } } $a = new a();?>

A. aB. 一個錯誤警告C. 一個致命性的報錯答案:C 因為類a是抽象類,不能被實例化

18. 執行以下代碼,輸出結果是<?phpclass a{ function construct(){ echo "echo class a something"; }}class b extends a{ function construct(){ echo "echo class b something"; }}$a = new b();?>

A. echo class a something echo class b somethingB. echo class b something echo class a somethingC. echo class a somethingD. echo class b something答案:D類 b 繼承自類 a,兩個類都定義了構造函數,由于二者名字相同,所以子類中的構造函數覆蓋了父類的構造函數,要想子類對象實例化時也執行父類的構造函數,需要在子類構造函數中使用 parent::construct()來顯示調用父類構造函數。

19. 請定義一個名為MyClass的類,這個類只有一個靜態方法justDoIt。(卓望)<?phpclass MyClass{ public static function justDoIt(){ }}?>20. 只有該類才能訪問該類的私有變量嗎?(卓望)

是的

21. 寫出你知道的幾種設計模式,并用php代碼實現其中一種。(卓望)

單例模式,工廠模式單例模式 實現代碼 見 第二題

總結:

我們在這個片文章中,我們主要給大家匯總了一下php面試題中關于面向對象中的一些常見面試問題,具體細節大家可以自己擴展,希望對你有所幫助!

相關推薦:

最讓人容易出錯的10道php面試題

php面試題中php核心技術的問題分享

php面試題中筆試題目的匯總

2017最全的php面試題目及答案總結

以上就是php面試題中面向對象的題目分析的詳細內容,更多請關注php中文網其它相關文章!

來源:php中文網

免責聲明:本文由用戶上傳,如有侵權請聯系刪除!