首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 面試必考 11 大核心問題深度解析:從基礎語法到 MVC 架構

     編輯:PHP 相關知識

準備 PHP 開發職位面試?這 11 道高頻題涵蓋語言基礎、架構模式、前端整合、資料庫操作、錯誤處理等核心領域。本文不僅給出標準答案,更補充面試官追問方向與實戰陷阱,助你從「背得出」進階到「講得透」。


1. 用最簡單語言說明什麼是 PHP?

標準答: PHP (Hypertext Preprocessor) 是一種**服務端腳本語言**,專為 Web 開發設計,可嵌入 HTML,執行於伺服器生成動態頁面輸出給瀏覽器。

加分點:

  • 解釋器單次啟動處理整個請求生命週期 (請求-響應模式)。
  • 弱型別、動態語言,支援面向對象 (PHP 5+ 完善)。
  • 生態豐富:Composer、框架 (Laravel/Symfony)、擴展生態 (PECL)。

2. 什麼是 MVC?PHP 中如何體現?

標準答: MVC 將應用分離為三層:

  • Model (模型):資料存取、業務邏輯、規則封裝 (Eloquent/Doctrine Entity)。
  • View (視圖):資料呈現 (Blade/Twig 模板、JSON API 響應)。
  • Controller (控制器):接收請求、協調 Model/View、返回響應 (Action/Invokable)。

追問陷阱: 「Fat Model, Skinny Controller」原則——業務邏輯下沉 Model/Service,Controller 僅做請求分發與響應組裝。

3. 頁面引用 CSS 有幾種方式?

標準答: 三種:

  1. 外部連結:<link rel="stylesheet" href="style.css"> (推薦,可緩存、復用)。
  2. 內部樣式:<style>...</style> (單頁特有樣式)。
  3. 內聯樣式:<div style="color:red"> (最高優先級,難維護,慎用)。

補充: `@import` 歸屬外部/內部方式,但會阻塞渲染,現代構建工具 (Vite/Webpack) 會打包合併。

4. PHP 支援多重繼承嗎?

標準答: **不支援類多重繼承** (單繼承),關鍵字 extends。但提供兩種機制實現代碼復用:

  • Trait (特質):use TraitName; 將方法組合進類 (PHP 5.4+),解決單繼承限制。
  • 介面:implements InterfaceA, InterfaceB 定義契約,可多實現。

經典追問: Trait 衝突解決 (insteadof, as)、鑽石繼承問題。

5. echo vs print 差異?

特性echoprint
返回值無 (void)總是返回 1 (可用於表達式)
參數可接受多參數 echo 'a', 'b'; (無逗號則為連接)僅接受單一參數
速度極微快 (無返回值開銷)略慢
用法語言構造,非函數語言構造,行為似函數

實戰: 大量輸出用 echo;需在表達式中輸出 (罕見) 才用 print。

6. GET vs POST 差異與安全邊界

維度GETPOST
資料位置URL 查詢字串 (?a=1&b=2)HTTP Body
長度限制瀏覽器/伺服器限制 (~2KB~8KB)受 post_max_size 限制 (預設 8MB,可調)
可見性明文顯示於地址欄/歷史/日誌不直接顯示 (但非加密,抓包可見)
冪等性**應為冪等** (查詢、分頁)**非冪等** (提交、刪除、修改)
緩存可被瀏覽器/CDN 緩存預設不緩存
CSRF 風險低 (幂等操作)**高,必須配合 Token 防護**

核心誤區: 「POST 就安全」——**HTTPS 才是傳輸層安全基石**,POST 只是不把參數放 URL 而已。

7. PHP 獲取圖片尺寸函數?

  • getimagesize($path):返回 [width, height, type, attr, bits, channels, mime],**最常用**。
  • imagesx($resource) / imagesy($resource):需先用 imagecreatefrom* 建立資源,**僅適用 GD 資源**,不支援直接讀檔。

陷阱: getimagesize 會下載遠程圖片 (若允許 allow_url_fopen),可能導致請求卡死,生產環境建議用 cURL 先下載再檢測。

8. 什麼是 PEAR?

標準答: PHP Extension and Application Repository,**歷史舊套件倉庫**,現已基本被 **Composer (Packagist)** 取代。面試若問及,答明「早期套件管理工具,現棄用,改用 Composer」即可展現時代感。

9. PHP + MySQL 上傳影片方案?

標準答: **資料庫僅存儲元數據 (路徑、名稱、大小、MIME、上傳者、時間)**,實體檔案存檔案系統/對象存儲 (OSS/S3/MinIO)。

關鍵配置 (php.ini):

upload_max_filesize = 100M      ; 單檔上限
post_max_size = 110M            ; 必須 > upload_max_filesize
max_execution_time = 300        ; 大檔上傳需更長時間
memory_limit = 256M             ; 避免處理大檔 OOM

進階: 分片上傳、斷點續傳 (Plupload/Uppy)、異步轉碼 (FFmpeg)、CDN 加速。

10. PHP 錯誤類型分級?

級別常數行為典型場景
錯誤E_ERROR腳本終止執行實例化不存在的類、require 失敗
警告E_WARNING腳本繼續執行include 失敗、參數類型錯誤
提示E_NOTICE / E_DEPRECATED腳本繼續使用未定義變數、呼叫棄用函數
嚴重E_PARSE編譯階段終止語法錯誤

現代最佳實踐:

  • 開發環境 error_reporting(E_ALL) + display_errors=On。
  • 生產環境 display_errors=Off + log_errors=On + 統一日誌系統 (Monolog -> ELK/Loki)。
  • 使用 set_error_handler() 統一轉為 Exception,配合 try-catch 處理。
  • PHP 7+ Throwable 介面統一 Error 與 Exception。

11. 如何定義常量?

<?php
// 全域常量 (命名慣例全大寫)
define('APP_VERSION', '1.0.0');
define('MAX_UPLOAD_SIZE', 10 * 1024 * 1024); // 運算式支援 PHP 5.6+

// 類常量 (推薦用於類相關配置)
class Config {
    public const DB_DRIVER = 'mysql';
    public const CACHE_TTL = 3600;
}

// 運行時常量 (極少用)
const RUNTIME_CONST = 'value';
?>

區別: define() 運行時定義、支援動態名稱;const 編譯時定義、語法更嚴格、效能略高、支援命名空間。


額外加分題:無 Submit 按鈕提交表單?

答案: JS 觸發 form.submit()、AJAX (Fetch/axios) 提交、Enter 鍵觸發 (單輸入框表單)、隱藏 <input type="submit" style="display:none"> 保留語義。

<!-- 純 JS 方式 -->
<a href="javascript:document.forms[0].submit();">提交</a>
<!-- 或現代寫法 -->
<button type="button" onclick="document.getElementById('myForm').submit()">提交</button>

面試官真正在評估什麼?

  1. 基礎扎實度:語言機制、記憶體模型、請求生命週期。
  2. 工程化思維:安全、效能、可維護、擴展性、觀測性。
  3. 生態熟悉度:Composer、PSR、主流框架、測試、CI/CD。
  4. 解決問題能力:遇到不知答案時,能否拆解、推理、給出大致方向。

背誦答案只是入場券,**能說出「為什麼」、「還有什麼替代方案」、「生產環境怎麼做」**才是通關鑰匙。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved