PHP 程式考題(面試考題參考)
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分享給朋友: