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


分享這篇文章的網址這篇文章的網址(可分享到FB、LINE):

用LINE分享給朋友: