- PHP là gì và tên viết tắt này có nghĩa là gì?
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 trong PHP là gì? Cho ví dụ.
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…
- Sự khác biệt giữa `$_GET` và `$_POST` là gì?
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ó những kiểu dữ liệu nào?
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…
- Sự khác biệt giữa toán tử `==` và `===` trong PHP là gì?
== 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…
- Cách làm việc với mảng trong PHP? Có mấy loại mảng?
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 xử lý chuỗi phổ biến trong PHP là gì?
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),…
- Sự khác biệt giữa `include` và `require` trong PHP là gì?
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…
- Làm thế nào để xử lý dữ liệu form trong PHP?
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)) { //…
- Các loại lỗi trong PHP là gì và cách xử lý chúng?
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…
- Cách định nghĩa và sử dụng hằng số (constant) trong PHP?
Đị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 và Object trong PHP khác nhau như thế nào?
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 (inheritance) trong PHP là gì?
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 có hỗ trợ đa kế thừa không? Làm thế nào để đạt được chức năng tương tự?
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 trong PHP là gì và khi nào nên dùng?
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 trong PHP là gì và chúng giải quyết vấn đề gì?
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 trong PHP là gì? Cho ví dụ.
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…
- Sự khác biệt giữa static method và instance method là gì?
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 (public, private, protected) trong PHP là gì?
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…
- PDO là gì và cách phòng chống SQL injection bằng PDO?
- Session trong PHP hoạt động như thế nào và khác gì so với Cookie?
- Namespace trong PHP là gì và tại sao nên dùng?
- Autoloading trong PHP là gì và cách triển khai?
- Generator trong PHP là gì và khi nào nên dùng?
- Sự khác biệt giữa `unset()` và `unlink()` là gì?
- Làm thế nào để phòng chống tấn công XSS trong PHP?
- Cách xử lý ngoại lệ (exception) trong PHP?
- Type hinting trong PHP là gì và tại sao quan trọng?
- Abstract class trong PHP là gì và khi nào nên dùng?
- Typed class constants trong PHP 8.3 là gì và tại sao nên dùng?
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…
- Fibers trong PHP 8.1 là gì và khác threads như thế nào?
- Readonly classes trong PHP 8.2 có những ràng buộc gì?
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 để…
- Enums trong PHP 8.1 là gì và khi nào nên dùng thay constants?
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…
- Value Objects trong PHP là gì và khi nào nên dùng thay vì kiểu nguyên thuỷ?
- Tại sao lưu mật khẩu bằng `password_hash()` / `password_verify()` thay vì `md5`/`sha1`?
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…
- Nullable type (`?type`) trong PHP là gì?
?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…
- Streams và stream wrapper trong PHP là gì?
- OPcache là gì và tối ưu hiệu năng PHP ra sao?
- SOLID gồm những nguyên tắc nào (áp dụng trong PHP)?
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à gì và Laravel dùng nó thế nào?
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…
- `match` trong PHP 8 khác `switch` ở những điểm nào?
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.…
- Named arguments và constructor property promotion trong PHP 8 giải quyết vấn đề gì?
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…
- Attribute trong PHP 8 là gì? Khác annotation trong docblock ra sao và framework dùng nó thế nào?