PHP 面試必備:50 道高頻題目詳細解析
整理自實際面試經驗,涵蓋 PHP 基礎、MySQL、前端基礎、設計模式、效能優化、安全性等核心領域。每題附帶標準答案與加分點,適合初中級工程師查漏補缺。
第一部分:PHP 基礎語法與核心函數 (1-20)
- 取得前一天日期時間:
date('Y-m-d H:i:s', strtotime('-1 day'))
- echo/print/print_r 差異:echo 多參數無返回值;print 單參數返回 1;print_r 可輸出陣列/物件結構
- 常用模板引擎:Smarty、Twig、Blade (Laravel)
- 版本控制工具:Git (主流)、SVN、Mercurial
- 字串反轉:ASCII 用
strrev();多位元組 (中文) 用 mb_substr() 迴圈或 preg_split('//u', $str)
- MySQL 優化方向:索引優化、查詢重寫、分庫分表、讀寫分離、快取、引擎選擇
- PHP 全名:Hypertext Preprocessor
- MySQL 當前時間/格式化:
NOW()、DATE_FORMAT()
- 中文截取無亂碼:
mb_substr($str, 0, 10, 'UTF-8')
- 客戶端/伺服器 IP:
$_SERVER['REMOTE_ADDR']、$_SERVER['SERVER_ADDR']
- include/require 差異:require 致命錯誤停止;include 警告繼續;require 編譯期載入;include 執行期載入;
_once 防重複
- Session 生命週期修改:
session_set_cookie_params()、ini_set('session.gc_maxlifetime')
- 取得遠端頁面內容:
file_get_contents() (需 allow_url_fopen)、cURL (更靈活)
- HTTP 401/404 Header:
header('HTTP/1.1 401 Unauthorized')、header('HTTP/1.1 404 Not Found')
- Heredoc 結束標記:頂格獨立行、分號結尾、無縮進
- ASP/PHP/JSP 比較:ASP 依賴 IIS/Windows;PHP/JSP 跨平台、開源生態豐富
- MVC 模式:Model (資料/邏輯)、View (呈現)、Controller (調度/輸入處理)
- SQL Top 10 發文者:
SELECT id, username FROM members ORDER BY posts DESC LIMIT 10
- 傳值/傳參考:
&$var 參考傳遞,函數內修改影響外部;多返回值、大物件傳遞時使用
- error_reporting:設定錯誤報告等級,如
E_ALL & ~E_NOTICE
第二部分:資料庫與 SQL 實務 (21-30)
- Email 格式驗證:
filter_var($email, FILTER_VALIDATE_EMAIL) 或 RFC 5322 相容正則
- 取得腳本路徑與參數:
$argv、$argc (CLI 模式)
- JS 對話框/焦點:
alert()/confirm()/prompt()、focus()
- JS 跳轉/引入外部檔:
location.href、<script src="...">
- @ 運算子:抑制錯誤訊息 (含 Notice/Warning),不影響 Fatal Error
- 空類別宣告/實例化:
class MyClass {}、new MyClass()
- 屬性存取:
$obj->property、$obj->{'property'}
- mysql_fetch_row/array 差異:前者僅數字索引;後者含關聯索引 (預設兩者皆有)
- GD 庫用途:動態圖片建立、縮圖、驗證碼、水印、圖表
- 輸出 HTML 方式:
echo、Heredoc、<?= ?>、模板引擎
第三部分:選擇題與程式碼輸出預測 (31-45)
- fopen() 為開啟檔案正確函數
- array_add() 不存在,正確為
$arr[]、array_push()
- 函數內未 global $num 輸出 10 (區域變數)
- 資料類型:int 整數、char 定長、varchar 變長、datetime 時間、text 長文本;char 定長補空格、varchar 實際長度+1位元組
- Auto_increment 必須為索引 (通常為 Primary Key)
- 三元運算子:
$a = $b > $c ? 4 : 5 輸出 4
- isset()/empty():檢查變數是否設定/是否為空 (0、''、null、false 皆為空)
- mysql_num_rows() 取得結果集筆數
- 陣列第一個元素:
$arr[0]、reset($arr)、current($arr)
- 陣列合併字串:
implode(',', $arr)
- 字串第一字元:
$str[0]、substr($str,0,1)
第四部分:OOP、設計模式與進階 (46-50)
- PHP 連接 SQL Server/Oracle:支援,需安裝
sqlsrv、oci8 擴展或使用 PDO
- PHP 5 存取修飾符:public、protected、private
- 建構/解構函數:
__construct()、__destruct()
- 取得 URL 副檔名:
pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_EXTENSION)
- 相對路徑計算/目錄遞迴掃描:見代碼實作
加分回答技巧
- 說明 原理 而非僅給語法 (如 Session 儲存機制、GC 機制)
- 提及 現代替代方案 (如 PDO 取代 mysql_*、Composer 套件管理、PSR 標準)
- 結合 實戰經驗 談優化案例 (慢查詢分析、快取策略、佇列削峰)
- 展現 安全意識 (SQL 注入防範、XSS/CSRF 防護、密碼雜湊)