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

傳說中雅虎 PHP 面試題與解析

     編輯:PHP 綜合知識

題目與解答

  1. 哪一行不會將 john 加入 $users 陣列?
    1. `$users[] = 'john';` ✅
    2. `array_add($users, 'john');` ❌ **PHP 無此函式**
    3. `array_push($users, 'john');` ✅
    4. `$users ||= 'john';` ❌ **語法錯誤** (PHP 7.4+ 有 `??=` 但非 `||=`)
  2. `sort()`, `asort()`, `ksort()` 差異?
    函式行為鍵值關係
    `sort()`值由小到大**重設數值索引 0..n**
    `asort()`值由小到大**保持鍵值關聯**
    `ksort()`**鍵名**由小到大保持關聯
    `rsort()`值由大到小重設索引
    `arsort()`值由大到小保持關聯
    `krsort()`鍵名由大到小保持關聯
  3. 輸出什麼?
    $num = 10;
    function multiply() { $num = $num * 10; }
    multiply();
    echo $num; // 10

    **原因**:函式內 `$num` 是區域變數,未宣告 `global $num` 或傳參考,不影響全域 `$num`。

  4. 參考變數 vs 普通變數?如何傳參考?

    參考變數 (`&$var`) 指向同一記憶體位址,修改其中一個影響另一個。函式參數定義 `function(&$param)` 或呼叫 `func(&$var)` (已棄用/移除)。現代建議**回傳值**或**物件傳遞**(物件預設參考行為)。

  5. 引入程式庫的函式?

    `include`, `include_once`, `require`, `require_once`。`*_once` 防重複載入;`require` 失敗致命錯誤,`include` 只警告。

  6. `foo()` vs `@foo()`?

    `@` 抑制錯誤訊息 (含 Notice/Warning),**不改變回傳值**。濫用會隱藏 Bug,生產環境慎用。

  7. 如何除錯 PHP?
    • Xdebug + IDE (PhpStorm/VS Code) 斷點、堆疊、變數檢視。
    • `error_reporting(E_ALL); ini_set('display_errors', 1);` 開發環境。
    • `var_dump()`, `debug_zval_dump()`, `debug_print_backtrace()`。
    • 日誌:`error_log()`, Monolog。
  8. `===` 做什麼?舉 `==` true 但 `===` false 例子。

    `===` 比較**值與型別**皆相同。`0 == 'abc'` 為 true (字串轉數值 0),`0 === 'abc'` 為 false。

  9. 宣告無屬性無方法的類別?
    class MyClass {}
  10. 建立該類別實例?
    $obj = new MyClass();
  11. 在類別內部存取/設定屬性?
    $this->prop = $value; $val = $this->prop;
  12. `include` vs `include_once` vs `require`?

    `_once` 防重複;`require` 失敗致命錯誤腳本停止;`include` 發出警告繼續執行。

  13. 導向新頁面的函式?
    1. `redir()` ❌
    2. `header()` ✅ header('Location: /url'); exit;
    3. `location()` ❌
    4. `redirect()` ❌
  14. 以讀寫模式開啟檔案?
    1. `fget()` ❌
    2. `file_open()` ❌
    3. `fopen()` ✅ fopen('file', 'r+')
    4. `open_file()` ❌
  15. `mysql_fetch_row()` vs `mysql_fetch_array()`?

    `_row` 回傳**數值索引陣列**;`_array` 回傳**數值+關聯雙重索引** (預設 `MYSQL_BOTH`),記憶體佔用較大。

  16. 程式碼輸出?
    $date = '08/26/2003';
    print ereg_replace('([0-9]+)/([0-9]+)/([0-9]+)', '2/1/3', $date);

    **輸出**:`2/1/3`。`ereg_replace` 以 `\1\2\3` 參照捕獲組,但範例替換字串為字面 `2/1/3`,故直接替換整個匹配字串。

  17. 正則移除 HTML 標籤?
    $clean = preg_replace('/<[^>]+>/', '', $string);

    注意:無法處理屬性含 `>`、CDATA、Script/Style 內容等邊界情況。建議用 `strip_tags()` 或 HTML 解析器。

  18. PHP vs Perl 陣列/雜湊區別?

    PHP **陣列即有序映射**,同時支援數值索引與字串鍵;Perl 有分開的 `@array` (有序列表) 和 `%hash` (無序鍵值對)。

  19. 如何克服 HTTP 無狀態?

    Session (Cookie + 伺服端儲存)、JWT (客戶端攜帶狀態)、隱藏表單欄位、URL 重寫。

  20. GD Library 做什麼?

    動態建立/操作圖片:縮圖、驗證碼、水印、圖表、水印等。

  21. 輸出 HTML 區塊的方法?
    1. 直接跳出 PHP 模式 `?> HTML <?php`
    2. `echo '...'`, `print '...'`
    3. Heredoc/Nowdoc `echo <<<HTML ... HTML;`
    4. `include 'template.php'`
    5. 模板引擎
  22. PHP 比 Perl 好嗎?

    見仁見智。PHP 專為 Web 設計、部署簡單、生態龐大;Perl 文字處理強、CPAN 成熟、單行指令威力大。選適合專案與團隊的。

面試準備建議

  • 熟練核心語法、陣列操作、字串處理、正則、檔案/目錄、Session/Cookie、資料庫 (PDO)、錯誤/異常處理。
  • 理解 **HTTP 協定**、Session 機制、CSRF/XSS/SQLi 防護、快取策略。
  • 能手寫常見演算法 (排序、遞迴、樹遍歷) 與設計模式 (單例、工廠、策略、觀察者)。
  • 說明專案中遇到的難題、優化經驗、架構決策理由。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved