物件導向是我們學習php不可或缺的一部分,很多朋友對物件導向都是一知半解的,所以導致很多朋友去公司面試的時候,問到php面試題中物件導向的問題就不知道如何是好,在之前的文章我們也介紹php面試題,筆試題,php核心技術題, 今天我們就帶大家來看看這個php面試題中的物件導向的題到底有哪些?
php面試題之物件導向題目
1. 寫出php 的public、protected、private 三種存取控制模式的區別(新浪網技術部)
#public :公有,任何地方都可以訪問
protected:繼承,只能在本類或子類中訪問,在其它地方不允許訪問
private:私有,只能在本類中訪問,在其他地方不允許存取
相關題目:請寫出PHP5 權限控制修飾符
private protected public
2. 設計模式考察:請用單態設計模式方法設計類滿足以下需求:
請用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
建構子,實例化物件時被呼叫
析構函數,當物件銷毀時被呼叫
call 物件調用某個方法,若存在該方法,則直接調用,若不存在,則調用
call
函數
get
get
函數set設定一個物件的屬性時,若屬性存在,則直接賦值,若不存在,則呼叫
set函數
isset
偵測一個物件的屬性是否存在時被呼叫unsetunset 一個物件的屬性時被呼叫
clone
複製物件時被呼叫autoload 實例化一個物件時,如果對應的類別不存在,則此方法被呼叫
相關題目:請寫出php5 的建構子和析構函式
建構子:
析構函式:
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 .(騰訊)###
<?php class 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 multi PHP blo .###答案: B######10. 類別的屬性可以序列化後保存到session 中,以便以後可以恢復整個類,這要用到的函數是。 ###serialize() 和unserialize()######11. 在PHP 中,如果衍生類別與父類別有相同名字的函數,則衍生類別的函數會取代父類別的函數,程式結果為# ##
<?php class A{ function disName(){ echo "Picachu"; } } class B extends A{ var $tmp; function disName(){ echo "Doraemon"; } } $cartoon = New B; $cartoon->disName(); ?>###A. tmp###B. Picachu###C. disName###D. Doraemon###E. 無輸出###答案: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. MVC
B. 代理模式
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. a
B. 一个错误警告
C. 一个致命性的报错
答案:C 因为类a是抽象类,不能被实例化
18. 执行以下代码,输出结果是
<?php class 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 something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
类 b 继承自类 a,两个类都定义了构造函数,由于二者名字相同,所以子类中的构造函数覆盖了父类的构造函数,要想子类对象实例化时也执行父类的构造函数,需要在子类构造函数中使用 parent::construct()
来显示调用父类构造函数。
19. 请定义一个名为MyClass的类,这个类只有一个静态方法justDoIt。(卓望)
<?php class MyClass{ public static function justDoIt(){ } } ?>
20. 只有该类才能访问该类的私有变量吗?(卓望)
是的
21. 写出你知道的几种设计模式,并用php代码实现其中一种。(卓望)
单例模式,工厂模式
单例模式 实现代码 见 第二题
总结:
我们在这个片文章中,我们主要给大家汇总了一下php面试题中关于面向对象中的一些常见面试问题,具体细节大家可以自己扩展,希望对你有所帮助!
相关推荐:
以上是php面試題中物件導向的題目分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

WebStorm Mac版
好用的JavaScript開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能