Bạn đã bao giờ lái một chiếc xe Toyota Camry với chỉ 1 bánh xe? Chắc chắn là không rồi!
Có một giai đoạn.Mà lập trình viên PHP nào cũng trải qua.
Bạn bắt đầu chia project thành nhiều file.
😄
Không còn một file:
index.phpdài 5.000 dòng nữa.
Thay vào đó.
Bạn tạo:
config.php
header.php
footer.php
database.php
menu.phpRồi trong index.php.
Bạn viết:
include "header.php";Website chạy.
😎
Hôm sau.
Bạn đổi thành:
require "header.php";Website vẫn chạy.
😄
Bạn lại thấy trên Internet có:
include_oncevà:
require_once🤔
Lúc này.
Đầu bắt đầu quay.
"Ủa... bốn cái này khác nhau chỗ nào?"
"Sao PHP thích làm khó người mới vậy?"
😅
Thật ra.
PHP không làm khó.
Nó chỉ cho bạn...
4 cách "mời" một file khác vào chương trình.
include, require, include_once và require_once là gì?
Đây là bốn câu lệnh trong PHP dùng để nạp (include) nội dung của một file vào file hiện tại.
Khác biệt nằm ở hai điểm:
- Nếu file bị thiếu thì chương trình có dừng hay không.
- File có được nạp nhiều lần hay chỉ một lần.
Ví dụ đời thường 🍜
Bạn đang nấu mì.
😄
Muốn có:
Trứng.
Rau.
Xúc xích.
Bạn phải lấy từng nguyên liệu từ tủ lạnh.
Project PHP cũng vậy.
Muốn có:
Database.
Header.
Menu.
Footer.
...
Bạn phải "lấy" từng file vào.
Đó chính là:
include
requireinclude hoạt động thế nào?
Ví dụ.
include "header.php";PHP sẽ:
Mở file.
↓
Đọc nội dung.
↓
Chèn vào đúng vị trí đó.
Giống như bạn copy-paste cả file.
Nếu file không tồn tại?
Ví dụ.
include "abc.php";PHP báo:
Warning.
😄
Nhưng.
Chương trình vẫn chạy tiếp.
Ví dụ.
include "abc.php";
echo "Website vẫn chạy";↓
Bạn vẫn thấy:
Website vẫn chạyrequire thì sao?
require "config.php";Nếu file tồn tại.
↓
Mọi thứ bình thường.
Nếu file không tồn tại.
↓
Fatal Error.
↓
Website dừng luôn.
😭
Ví dụ đời thường 😄
include giống như:
Bạn định pha cà phê.
Không có đường.
😅
Thôi.
Uống cà phê đắng.
Vẫn được.
require giống như:
Bạn định lái xe.
Không có bánh xe.
🤡
Thì...
Không thể đi tiếp.
Khi nào nên dùng require?
Ví dụ.
File:
database.phpNếu thiếu.
Website gần như không thể hoạt động.
↓
Nên dùng:
require "database.php";Tương tự.
Các file:
config.php
autoload.php
functions.phpthường cũng dùng:
require
Khi nào nên dùng include?
Ví dụ.
sidebar.phpHoặc.
banner.phpThiếu cũng không quá nghiêm trọng.
↓
Có thể dùng:
includeWebsite vẫn hoạt động.
Chỉ thiếu một phần giao diện.
include_once là gì?
Đây là phiên bản "thông minh" hơn.
😄
Ví dụ.
Bạn viết:
include_once "config.php";Nếu file đã được nạp.
↓
PHP sẽ bỏ qua.
Không nạp lần thứ hai.
require_once cũng vậy
require_once "database.php";Nếu file đã có.
↓
Không đọc lại.
Nếu chưa có.
↓
Đọc vào.
Nếu không tìm thấy.
↓
Fatal Error.
Vì sao phải có _once? 🤔
Đây là lỗi rất hay gặp.
Ví dụ.
File:
functions.phpCó:
function hello()
{
}Bạn:
include "functions.php";
include "functions.php";PHP báo:
Cannot redeclare function hello()😭
Vì.
Hàm bị khai báo hai lần.
require_once cứu bạn 😄
Chỉ cần đổi thành:
require_once "functions.php";↓
Dù gọi nhiều lần.
PHP chỉ nạp:
Một lần.
Xong.
InfinityFree Case 😅
Có bạn gửi project.
Trang chủ.
OK.
😄
Trang sản phẩm.
Fatal Error.
Sau khoảng:
5 phút.
Mình phát hiện.
File:
functions.phpđược:
includeở:
Header.
Menu.
Footer.
Và.
Index.
🤡
Kết quả.
Một hàm bị khai báo:
4 lần.
Đổi sang:
require_onceWebsite chạy ngay.
Một hiểu lầm rất phổ biến 🤡
Nhiều người nghĩ.
Cứ dùng:
includecho mọi thứ.
Không.
😄
Hãy tự hỏi:
"Nếu thiếu file này.
Website có còn chạy được không?"
Nếu:
Không.
↓
Dùng:
requireNếu:
Có.
↓
Dùng:
includeNên dùng cái nào nhiều nhất?
Nếu hỏi mình.
Trong project PHP hiện đại.
Mình thường dùng:
require_once😄
Vì:
✔ Quan trọng
✔ Không bị include trùng
✔ An toàn
Rất nhiều framework.
Thư viện.
CMS.
Cũng có cách tiếp cận tương tự.
Debug kiểu dev thật 😎
✅ 1. File cấu hình nên dùng require_once
Ví dụ.
Database.
Config.
Functions.
✅ 2. Đừng include cùng một file nhiều lần
Đặc biệt khi file có:
Function.
Class.
Constant.
✅ 3. Đọc kỹ thông báo lỗi
Nếu thấy:
Cannot redeclare...Hãy nghĩ ngay.
Include trùng.
✅ 4. Tổ chức project rõ ràng
Đừng để:
config.phpxuất hiện ở 10 nơi khác nhau.
Checklist chuẩn không cần chỉnh 😎
☑ include: thiếu file vẫn chạy
☑ require: thiếu file dừng chương trình
☑ include_once: chỉ nạp một lần
☑ require_once: vừa bắt buộc vừa chỉ nạp một lần
☑ File cấu hình nên dùng require_once
☑ Tránh include trùng file chứa function hoặc class
FAQ nhanh
include và require khác nhau thế nào?
→ include báo Warning và chương trình vẫn chạy.
→ require báo Fatal Error và dừng chương trình.
include_once có chậm hơn include không?
→ Khác biệt rất nhỏ và thường không đáng kể trong đa số project.
Có nên dùng require_once cho mọi project mới?
→ Với các file cấu hình, thư viện hoặc hàm dùng chung thì đây là lựa chọn rất phổ biến.
Vì sao báo "Cannot redeclare function"?
→ Thường do cùng một file chứa hàm bị include nhiều lần.
Bạn có thể cũng đang gặp 😭
👉 localhost vs hosting khác nhau thế nào?
👉 Vì sao Windows chạy nhưng Linux host chết?
👉 UTF-8 và bi kịch tiếng Việt bị lỗi font
👉 Call to undefined function là gì?
👉 Fatal Error trong PHP là gì?
👉 Cache là gì? (Vì sao sửa code rồi mà website vẫn không thay đổi?)
👉 Comment code đúng cách để khỏi tự giết mình
Tổng kết
Nếu ví project PHP là một bộ phim.
Thì mỗi file.
Là một diễn viên.
😄
include
giống như:
"Diễn viên bận thì thôi.
Phim vẫn quay."
require
lại giống như:
"Thiếu diễn viên chính.
Ngừng quay!"
Còn:
include_once
và
require_once
thì giống như đạo diễn nói:
Gợi ý nhỏ
"Mỗi diễn viên chỉ cần xuất hiện một lần."
Không ai muốn cùng một nhân vật bước vào sân khấu...
4 lần liên tiếp.
🤡
Và nếu bạn chỉ nhớ một điều từ bài này, hãy nhớ:
Hãy dùng require_once cho những file quan trọng như config.php, database.php và functions.php.
Nó giúp project ổn định hơn và tránh được rất nhiều lỗi khó chịu khi code ngày càng lớn. 🚀