搜尋
首頁後端開發php教程php面試題中物件導向的題目分析

php面試題中物件導向的題目分析

Nov 10, 2017 am 10:38 AM
php物件

物件導向是我們學習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
建構子,實例化物件時被呼叫

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 .(騰訊)###
<?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面试题中关于面向对象中的一些常见面试问题,具体细节大家可以自己扩展,希望对你有所帮助!

相关推荐:

最让人容易出错的10道php面试题


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


#php面試題目中筆試題目的總結


2017最完整的php面試題目及答案摘要


以上是php面試題中物件導向的題目分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
哪些常見問題會導致PHP會話失敗?哪些常見問題會導致PHP會話失敗?Apr 25, 2025 am 12:16 AM

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

您如何在PHP中調試與會話相關的問題?您如何在PHP中調試與會話相關的問題?Apr 25, 2025 am 12:12 AM

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

如果session_start()被多次調用會發生什麼?如果session_start()被多次調用會發生什麼?Apr 25, 2025 am 12:06 AM

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

您如何在PHP中配置會話壽命?您如何在PHP中配置會話壽命?Apr 25, 2025 am 12:05 AM

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

使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

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

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

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

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

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

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

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

See all articles

熱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

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

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

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

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能