20 PHP Interview Questions mà bạn nên biết
Bài đăng này đã không được cập nhật trong 5 năm
Bài viết này mình sẽ đưa ra 20 câu hỏi phỏng vấn PHP mà các bạn có thể sẽ gặp phải khi đi phỏng vấn
1. Sự khác nhau giữa include()
và require()
?
-
Cả hai lệnh đều có nhiệm vụ import một file PHP vào một file PHP khác.
-
Nếu khi import một file bằng lệnh require thì nếu chương trình bị lỗi thì lập tức trình biên dịch sẽ dừng và xuất ra thông báo lỗi. Còn nếu sử dụng lệnh include thì đó chỉ là một cảnh báo nên chương trình vẫn chạy cho đến cuối chương trình.
2. Làm thế nào để lấy địa chỉ IP của client ?
Câu hỏi này sẽ cho thấy ứng viên có sự sáng tạo khi có nhiều câu trả lời khác nhau nhưng câu trả lời dễ dàng nhất đó là
$_SERVER["REMOTE_ADDR"];
3. Sự khác nhau giữa unset()
và unlink()
unset()
dùng để set 1 biến thànhundenfined
.unlink()
dùng để xóa một tập tin được lưu trên máy chủ của bạn.
4. Output của đoạn code sau
$a = '1';
$b = &$a;
$b = "2$b";
echo $a.", ".$b;
Output là:
21, 21
Vì: Ở đây ta thấy rằng, khi dùng phép gán $b = &$a
, ta đã cho phép biến $b
trỏ tới vùng nhớ của biến $a
. Nên khi biến $b
thay đổi giá trị thì biến $a
cũng thay đổi giá trị
5. Các loại lỗi chính trong PHP là gì và chúng khác nhau như thế nào ?
Trong PHP có 3 kiểu lỗi chính:
- Notices: Đây là lỗi không nghiêm trọng khi gặp lỗi này chương trình vẫn tiếp tục được thực thi. Ví dụ về trường hợp xảy ra lỗi này đó là khi lấy ra giá trị của một phần tử trong mảng sử dụng key không tồn tại trong mảng..
- Warnings: Lỗi này nghiêm trọng hơn Notice tuy nhiên vẫn không dẫn tới việc chương trình bị chấm dứt. Ví dụ về trường hợp xảy ra lỗi này đó là khi sử dụng include() để nhập vào một file không tồn tại trên hệ thống.
- Fatals: Đây là lỗi nghiêm trọng và sẽ dẫn tới việc chương trình bị chấm dứt thực thi. Ví dụ về trường hợp xảy ra lỗi này đó là khi sử dụng require() để nhập vào một file không tồn tại trên hệ thống.
6. HTML form hỗ trợ những HTTP Method nào trong property "method", có thể dùng HTML form để make 1 HTTP request PUT lên Server được không? Server có nhận biết được không ?
- HTML form hỗ trợ những HTTP Method nào: GET, POST.
- Có thể dùng HTML form để make 1 HTTP request PUT lên Server được.
- Để Server nhận biết được thì ở form HTML ta cần tạo 1 input ẩn dạng
<input type="hidden" name="_method" value="PUT">
7. Sự khác nhau giữa GET
và POST
- Cả GET và POST đều dùng để gửi dữ liệu lên server:
- Phương thức GET rất dễ nhận thấy đó là trên URL sẽ kèm theo dữ liệu mà chúng ta muốn gửi.
- Phương thức POST có tính bảo mật hơn vì dữ liệu gửi phải thông qua một form HTML nên nó bị ẩn, nghĩa là chúng ta không thể thấy các giá trị đó được.
- Xét về độ bảo mật thì phương thức POST sẽ bảo mật hơn phương thức GET.
- Xét về tốc độ thì phương thức GET nhanh hơn phương thức POST.
8. Làm thế nào để enable báo lỗi trong PHP ?
- Kiểm tra xem "
display_errors
" đã "on
" trongphp.ini
hay chưa hoặc khai báo “ini_set('display_errors', 1)
” trong tập lệnh của bạn. - Sau đó, include “
error_reporting(E_ALL)
” trong code của bạn để hiển thị tất cả các loại thông báo lỗi trong quá trình thực thi chương trình
9. Traits là gì ?
Traits hiểu đơn giản là một nhóm các methods
mà bạn muốn include
nó trong một class khác. Một Trait giống với abstract class
không thể khởi tạo trên chính nó.
10. Có thể thay đổi giá trị của constant
trong quá trình thực thi tập lệnh ?
Không, giá trị của 1 constant
không thể thay đổi khi đã khai báo
11. Có thể kế thừa 1 class định nghĩa là final
?
Không, vì khi một class được khai báo là final
thì không lớp nào có thể kế thừa nó và nó chỉ có thể khởi tạo được thôi.
12. __construct()
và __destruct()
trong PHP là gì ?
__construct()
: Phương thức khởi tạo này nghĩa là một phương thức mà nó sẽ được tự động thực thi khi chúng ta tạo ra một đối tượng mới, và các tham số trong phương thức này chúng ta có thể truyền nó vào ngay lúc tạo ra đối tượng.__destruct()
: Là hàm tự động gọi sau khi đối tượng bị hủy, nó thường được sử dụng để giải phóng bộ nhớ chương trình. Trong đối tượng hàm hủy có thể có hoặc không.
13. Làm thế nào để lấy số lượng phần tử trong mảng ?
Để lấy số lượng phần tử trong mảng ta dùng hàm count()
14. 3 scope levels available trong PHP là gì và bạn định nghĩa chúng như thế nào ?
Public
thành viên này có thể truy cập ở bất kỳ đâu.Private
chỉ có thể truy cập từ chính lớp định nghĩa ra thành viên.Protected
chỉ có thể truy cập từ chính lớp định nghĩa ra thành viên và các lớp kế thừa nó.
15. getter và setter là gì và tại sao chúng quan trọng ?
Với các property có visibility khác với public (bao gồm private hoặc protected) thì chúng ta sẽ thường sẽ khai báo thêm các setter() hoặc getter() method vào class để có thể thực hiện các tác vụ lấy ra (hoặc gán) giá trị cho các property này.
16. MVC là gì và các thành phần đóng vai trò như thế nào ?
- MVC là chữ viết tắt của Model - View - Controller
- Model: có nhiệm vụ thao tác với cơ sở dữ liệu, nghĩa là nó sẽ chứa tất cả các hàm, các phương thức truy vấn trực tiếp với dữ liệu và controller sẽ thông qua các hàm, phương thức đó để lấy dữ liệu rồi gửi qua View
- View: có nhiệm vụ tiếp nhận dữ liệu từ controller và hiển thị nội dung sang các đoạn mã HTML
- Controller: đóng vài trò trung gian giữa Model và View. Nó có nhiệm vụ tiếp nhận yêu cầu từ client sau đó xử lý request, load model tương ứng và gửi data qua view tương ứng rồi trả kết quả về cho client
17. SQL Injection là gì và cách phòng chống
- SQL Injection là một kỹ thuật lợi dụng những lỗ hổng về câu truy vấn lấy dữ liệu của những website không an toàn trên web
- Để phòng chống lỗi này thì cần ràng buộc thật kỹ dữ liệu người dùng nhập vào và luôn luôn phải có quan điểm
Đừng bao giờ tin vào những thứ người dùng nhập vào là đúng
.- Luôn ràng buộc kiểu dữ liệu
- Regular Expression
- Dùng các hàm có sẵn để giảm thiểu lỗi, mỗi khi truy vấn thì mọi người nên sử dụng thêm hàm
mysqli_real_escape_string
để chuyển đổi một chuỗi thành một query an toàn.
18. Output của đoạn code
$i = 016;
echo $i / 2;
Output: 7
Vì: Số 0
đứng đầu được hiểu là số bát phân trong PHP,do đó số 016
được tính là số thập phân 14
thay vì 16
19. Tại sao nên sử dụng ===
thay vì ==
?
Khi so sánh ==
thì nó chỉ so sánh giá trị, PHP sẽ phải có bước chuyển đổi, còn khi so sánh ===
thì nó so sánh cả giá trị và kiểu của biến nên chỉ bằng nhau khi và chỉ khi có cùng giá trị và cùng kiểu
20. PSR là gì ?
PSR viết tắt của PHP Standard Recommendation, là những tiêu chuẩn khi code PHP, nó được cộng đồng PHP xây dựng và áp dụng theo.Ví dụ như:
- Chuẩn PSR-0 nói về autoloading
- Chuẩn PSR-1 về basic coding, chuẩn PSR-2 về style coding
- Chuẩn PSR-3 nói về logging
- Chuẩn PSR-4 nói về autoloading : đây là phần cải tiến của PSR-0
- Chuẩn PSR-7 nói về HTTP message
Tham khảo
All rights reserved