Tổng hợp 43 câu hỏi phỏng vấn PHP kèm đáp án chi tiết, song ngữ Việt–Anh — sắp xếp từ cơ bản đến nâng cao. Ôn luyện miễn phí, tự động lưu tiến độ.
PHP viết tắt của Hypertext Preprocessor, là ngôn ngữ lập trình phía server dùng để tạo trang web động. Khi người dùng truy cập một trang PHP, server sẽ thực thi mã PHP rồi trả về HTML cho trình duyệt. Khác với JavaScript chạy trên…
Superglobal là các biến được PHP định nghĩa sẵn, có thể truy cập ở bất kỳ đâu trong script mà không cần khai báo global. Các superglobal quan trọng: $GET (dữ liệu gửi qua URL), $POST (dữ liệu gửi ẩn qua form), $SERVER (thông tin…
Cả hai đều dùng để lấy dữ liệu form nhưng khác nhau về tính bảo mật và giới hạn dữ liệu. $GET đính kèm dữ liệu vào URL (dễ nhìn thấy), giới hạn khoảng 2KB và không an toàn cho dữ liệu nhạy cảm. $POST…
PHP có 8 kiểu dữ liệu cơ bản: String (chuỗi như "Hello"), Integer (số nguyên), Float (số thập phân), Boolean (true/false), Array (tập hợp giá trị), Object (thực thể của lớp), NULL (không có giá trị), và Resource (tham chiếu tài nguyên bên ngoài). Bốn…
== kiểm tra giá trị có bằng nhau không nhưng cho phép chuyển đổi kiểu dữ liệu. Ví dụ "5" == 5 trả về true vì PHP tự đổi chuỗi thành số. Trong khi === (so sánh nghiêm ngặt) kiểm tra cả giá trị lẫn…
PHP có ba loại mảng: Indexed array (truy cập theo vị trí: $fruits[0]), Associative array (truy cập theo key: $person["name"]), và Multidimensional array (mảng chứa mảng khác). Tạo mảng indexed: $arr = ["apple", "banana"], mảng associative: $arr = ["name" = "John", "age" = 30]. Các…
Các hàm chuỗi quan trọng gồm: strlen() (lấy độ dài), strpos() (tìm vị trí chuỗi con), strreplace() (thay thế text), substr() (cắt chuỗi), strtolower() và strtoupper() (đổi chữ hoa/thường), trim() (xoá khoảng trắng đầu cuối), explode() (tách chuỗi thành mảng), implode() (ghép mảng thành chuỗi),…
Cả hai đều nhúng file PHP bên ngoài, nhưng khác nhau ở cách xử lý lỗi. include chỉ cảnh báo (EWARNING) nếu file không tồn tại và tiếp tục chạy, còn require báo lỗi nghiêm trọng (EERROR) và dừng thực thi ngay. includeonce và requireonce…
Truy cập dữ liệu form qua superglobal: method GET dùng $GET["fieldname"], POST dùng $POST["fieldname"]. Luôn validate và sanitize: kiểm tra tồn tại với isset($POST["email"]), validate định dạng với filtervar(), escape output với htmlspecialchars() để ngăn XSS. Ví dụ: $email = htmlspecialchars($POST["email"]); if(filtervar($email, FILTERVALIDATEEMAIL)) { //…
PHP có ba loại lỗi truyền thống: Notice (không nghiêm trọng, không dừng script như truy cập biến chưa định nghĩa), Warning (nghiêm trọng hơn nhưng script vẫn chạy như mở file không hợp lệ), và Fatal error (nghiêm trọng, dừng thực thi như gọi…
Định nghĩa hằng số bằng define("CONSTANTNAME", value) hoặc const CONSTANTNAME = value;. Hằng số không có dấu $, không thể thay đổi sau khi định nghĩa, là global mà không cần dùng từ khoá global. Từ PHP 8.0, hằng số luôn case-sensitive (tham số $caseinsensitive…
Class là bản thiết kế (blueprint) định nghĩa thuộc tính và phương thức, còn object là một thực thể cụ thể tạo ra từ class đó. Hãy nghĩ class như khuôn bánh, object là những chiếc bánh thực sự. Mỗi object có bản sao thuộc…
Kế thừa cho phép class con kế thừa thuộc tính và phương thức từ class cha, giúp tái sử dụng code. Dùng class Student extends User để kế thừa. Class con có thể truy cập các thành phần public và protected của cha, override phương…
PHP không hỗ trợ đa kế thừa (một class chỉ có thể extends một class cha). Thay vào đó, dùng interface: một class có thể implement nhiều interface. Ví dụ: class Employee implements Payable, Manageable trong đó cả hai interface đều định nghĩa contract mà…
Interface định nghĩa một contract — tập phương thức mà class implement bắt buộc phải có. Bất kỳ class nào implement interface này đều phải triển khai đủ các phương thức đó. Lợi ích: đảm bảo tính nhất quán giữa các implementation, cho phép polymorphism,…
Trait cho phép tái sử dụng phương thức trong nhiều class không liên quan mà không cần kế thừa. Khai báo: trait Logger { public function log($msg) { echo $msg; } }. Dùng trong bất kỳ class nào: class User { use Logger; } và…
Magic methods là các phương thức đặc biệt tự động được gọi khi có hành động tương ứng xảy ra. Các magic method quan trọng: construct() (chạy khi tạo object), destruct() (chạy khi huỷ object), get() (truy cập thuộc tính không tồn tại), set() (gán…
Instance method thuộc về object và truy cập dữ liệu riêng của object qua $this. Gọi bằng $object-method(). Static method thuộc về chính class, không phải instance, và không thể truy cập $this. Khai báo với static function và gọi bằng ClassName::method(). Ví dụ: User::count()…
Access modifier kiểm soát phạm vi truy cập của thuộc tính và phương thức: public truy cập được từ mọi nơi (trong/ngoài class và subclass), private chỉ truy cập được bên trong class đó (không phải subclass), protected truy cập được trong class và subclass…
Typed class constants cho phép khai báo kiểu dữ liệu cho hằng số trong class, tương tự typed properties. Ví dụ: public const int MAXUSERS = 1000; hoặc public const string APIKEY = "secret";. Lợi ích: tăng type safety, IDE autocomplete chính xác hơn, ngăn…
Readonly class chặn sửa đổi public property sau khi khởi tạo: Ràng buộc: mọi property phải có kiểu (không được untyped), không được khai báo static property, không dùng được [AllowDynamicProperties], và mỗi property phải được gán giá trị ngay trong constructor. Rất hợp để…
Enum định nghĩa một tập giá trị cố định, hợp lệ, với type safety đầy đủ: Hơn hằng số ở chỗ: được type-check (không gán bừa giá trị khác), cho phép viết method ngay trong enum, và tích hợp với Eloquent qua cast. Dùng cho…
md5/sha1 là hàm băm nhanh và không có salt → dễ brute-force bằng GPU và tra rainbow table. passwordhash() dùng thuật toán chậm có chủ đích (mặc định bcrypt, hoặc Argon2) với salt ngẫu nhiên nhúng sẵn trong chuỗi kết quả, nên không cần cột…
?T khai báo giá trị hoặc là kiểu T, hoặc là null. Dùng được cho tham số, kiểu trả về, và property (từ 7.4). Đây là ràng buộc rõ ràng: ?int nhận int hoặc null, nhưng không nhận string. - Từ PHP 8, ?T tương…
Năm nguyên tắc thiết kế OOP do Robert C. Martin đúc kết: - S — Single Responsibility: mỗi class chỉ có một lý do để thay đổi. Tách logic gửi mail ra khỏi class User. - O — Open/Closed: mở cho mở rộng, đóng cho…
Composer là trình quản lý dependency theo từng project cho PHP (vai trò như npm với Node). Nó giải quyết cây phụ thuộc và tự sinh autoloader. - composer.json — khai báo package + ràng buộc version theo semver (^8.0, ~2.3). - composer.lock — ghim…
Bốn khác biệt cần nêu được: 1. So sánh nghiêm ngặt. match dùng ===, switch dùng ==. Đây là điểm hay bị hỏi lại. 2. Là biểu thức (expression). match trả về giá trị, gán thẳng vào biến hoặc return được. switch là câu lệnh.…
Constructor property promotion cho phép khai báo và gán property ngay trên tham số constructor, bỏ đi phần lặp private X $x; ... $this-x = $x;. Named arguments cho phép truyền tham số theo tên thay vì theo thứ tự: Lợi ích: gọi hàm nhiều…