PHP 程式考題(面試考題參考)

行動版 for , 瀏覽人次: 892  , SSL Connection SSL
  • 1. 請解釋 PHP 的 Class 和 Interface 之間的差異?

    Class 可宣告屬性, Interface則否
    Class 用new實例化, Interface則否
    Class 內已有實作的方法內容, Interface則否(Interface所有的方法都是抽象的)

    2. 何謂 Traits?

    由於php不可多重繼承, Traits解決在單線繼承的限制下,讓程式碼能夠重複使用。並降低複雜度。使用Traits,可以在需要某些特定的特性與功能時,才引用特定的Traits。

    3. 何謂 MVC 架構?

    一種設計模式,在這個模式裡,會分成 Model、View、Controller:
    M: Model「模型」,負責和資料庫溝通。
    V: View「視圖」,UI與版面,可與美術分工合作。
    C: Controller「控制器」,應用程式的工作流程與走向,決定request/response的路徑。

    4. 何謂 PHP Session?Session 和 Cookie 有何不同?

    PHP Session 以全域性變數形式儲存在一個session中並且會生成一個唯一的session_id。
    Session:在伺服器端,較為安全,可用以認證用戶,關閉瀏覽器即失效。
    Cookie:在客戶端,於瀏覽器端儲存資料並以此跟蹤和識別使用者,可設定期限存在於客戶端。

    5. 請解釋 $_GET 和 $_POST 之間的差異?

    $_GET用以存取網址列上之明碼變數,有長度限制。
    $_POST用以存取表單post過來的變數,較為隱密。

    6. 何謂「傳值呼叫 (Call By Value)」與「傳址呼叫 (Call By Reference)」,請解釋兩者的差異?

    傳值呼叫 (Call By Value):「傳值」所傳遞的是「數值的複製」,就算我們修改 b 的內容,a 也不會受到影響,兩者不會互相影響其值。

    傳址呼叫 (Call By Reference):「傳址」所傳的則是「記憶體的參考位置」,因此如果修改了 b 內容的值, a也會被改變,因為他們指的是同一個記憶體位置,是同一個物件。

    7. 請解釋 include 和 require 之間的差異?

    include: 這個函式一般是放在流程控制的處理區段中,include在引入檔案時,如果碰到錯誤,會給出提示,但會繼續運行之後的程式碼。

    require: 通常放在 PHP 程式的最前面,PHP 程式在執行前,就會先讀入 require引入的檔案,require在引入檔案時,如果碰到錯誤,會給出提示,但中止運行。

    8. 請寫個可以上傳檔案的網頁,只上傳一個檔案即可,須包含要顯示的 HTML,以及 PHP 處理上傳檔案的部分。

    HTML部分:

    <form method="post" enctype="multipart/form-data" action="upload.php">

      <input type="file" name="my_file">

      <input type="submit" value="Upload">

    </form>

    後端PHP部分:

    <?php

    //檢查檔案是否上傳成功

    if ($_FILES[‘my_file’][‘error’] === UPLOAD_ERR_OK){

      //檢查檔案是否已經存在

      if (file_exists(‘upload/’ . $_FILES[‘my_file’][‘name’])){

        echo ‘檔案已存在’;

      } else {

        $file = $_FILES[‘my_file’][‘tmp_name’];

        $dest = ‘upload/’ . $_FILES[‘my_file’][‘name’];

        //將檔案移至指定位置

        move_uploaded_file($file, $dest);

      }

    } else {

      echo ‘錯誤代碼:’ . $_FILES[‘my_file’][‘error’] ;

    }

    ?>

    9. 下面有兩個資料表,members和member_actions,請回答以下問題

    9-1. 請列出這段 SQL 執行的結果:

    SELECT * FROM members LEFT JOIN member_actions ON members.id=member_actions.member_id

    id name member_id action
    4 Ken 4 Jump
    3 John 3 Kick
    1 Alice 1 Kick
    5 Vivian 5 Stop
    1 Alice 1 Jump
    2 Peter NULL NULL

    9-2. 請列出這段 SQL 執行的結果:

    SELECT * FROM members INNER JOIN member_actions ON members.id=member_actions.member_id

    id name member_id action
    4 Ken 4 Jump
    3 John 3 Kick
    1 Alice 1 Kick
    5 Vivian 5 Stop
    1 Alice 1 Jump

    9-3. 請寫一段 SQL 計算每個 member_actions.action 的數量,並列出 SQL 執行的結果

    SELECT action,COUNT(*) as num FROM `member_actions` GROUP by action

    action num
    Jump 2
    Kick 2
    Stop 1

    9-4. 請寫一段 SQL,在members新增一筆name為Ben的資料。

      INSERT INTO `members`(`name`) VALUES (‘Ben’)

    9-5. 請寫一段 SQL,在member_actions更新member_id為3的資料,更新action為Jump。

    UPDATE `member_actions` SET `action`=’Jump’ WHERE `member_id`=3

回 文章列表頁