- 1 1. Tổng quan về việc nhúng file trong PHP
- 2 2. Giới thiệu 4 hàm: include, require, include_once, require_once
- 3 3. Sự khác biệt giữa include và require
- 4 4. Sự khác biệt giữa include_once và require_once
- 5 5. Bảng so sánh 4 hàm
- 6 6. Những lỗi phổ biến khi dùng include/require
- 7 7. Best Practices khi nhúng file PHP
- 8 Câu hỏi thường gặp
1. Tổng quan về việc nhúng file trong PHP
Tại sao cần chia nhỏ file?
Khi một dự án PHP ngày càng lớn, số lượng dòng code trong một file sẽ trở nên quá tải và khó quản lý. Việc chia nhỏ file giúp:
- Dễ bảo trì và đọc hiểu mã nguồn
- Tái sử dụng các phần code chung như header, footer, config, database
- Hỗ trợ tổ chức kiến trúc rõ ràng, đặc biệt trong mô hình MVC hoặc khi sử dụng framework
Khi nào cần dùng include/require?
Bạn sẽ thường sử dụng include hoặc require khi:
- Cần nhúng một file chứa hàm, class, hoặc đoạn HTML tái sử dụng
- Muốn load file cấu hình (config.php)
- Chia giao diện thành các thành phần riêng như header.php, sidebar.php, footer.php
Lợi ích của việc tái sử dụng code
Việc nhúng file giúp tránh lặp lại code (DRY – Don’t Repeat Yourself). Ví dụ, bạn chỉ cần viết phần kết nối database một lần trong file db.php, sau đó chỉ cần require_once 'db.php'; ở bất kỳ file nào cần dùng đến.
2. Giới thiệu 4 hàm: include, require, include_once, require_once

include
- Chức năng: Nhúng nội dung file vào vị trí được gọi.
- Đặc điểm: Nếu file không tồn tại, PHP sẽ cảnh báo (warning) nhưng tiếp tục thực thi.
- Ví dụ:
include 'header.php';
require
- Chức năng: Tương tự như
include - Đặc điểm: Nếu file không tồn tại, PHP sẽ dừng toàn bộ chương trình với lỗi fatal error.
- Ví dụ:
require 'config.php';
include_once
- Chức năng: Nhúng file một lần duy nhất, những lần sau sẽ bị bỏ qua (kể cả nếu gọi lại).
- Đặc điểm: Tránh tình trạng định nghĩa lại hàm/class nếu file bị gọi nhiều lần.
- Ví dụ:
include_once 'helpers.php';
require_once
- Chức năng: Kết hợp tính chất của
requirevàonce. - Đặc điểm: Dừng chương trình nếu file lỗi, nhưng chỉ load 1 lần duy nhất.
- Ví dụ:
require_once 'autoload.php';
3. Sự khác biệt giữa include và require
Cách xử lý lỗi
| Hàm | Khi file không tồn tại | Kết quả |
|---|---|---|
include | Gây warning | Tiếp tục chạy |
require | Gây fatal error | Dừng chương trình |
Ví dụ minh họa
// include_example.php
include 'non_existent.php';
echo "Vẫn chạy tiếp sau include";
Kết quả: Xuất hiện warning, nhưng dòng “Vẫn chạy tiếp…” vẫn được in.
// require_example.php
require 'non_existent.php';
echo "Không chạy đến đây";
Kết quả: Lỗi nghiêm trọng (fatal error), chương trình dừng ngay tại dòng require.
Khi nào nên dùng require thay vì include?
- Khi file đó bắt buộc phải có để chương trình chạy đúng (như config, autoload, connection)
- Đảm bảo không bị tiếp tục chạy trong trạng thái thiếu thông tin quan trọng
4. Sự khác biệt giữa include_once và require_once
Vấn đề khi nhúng file nhiều lần

Khi nhúng một file PHP chứa định nghĩa hàm, class hoặc hằng số nhiều lần, bạn sẽ gặp lỗi “Cannot redeclare function/class”. Đây là lý do include_once và require_once ra đời.
Chức năng của _once
include_once: Nhúng file một lần duy nhất, nếu đã nhúng trước đó thì không nhúng lại nữa, và tiếp tục chạy nếu file không tồn tại.require_once: Giốnginclude_once, nhưng dừng chương trình nếu file không tồn tại.
Ví dụ minh họa
// helpers.php
function sayHello() {
echo "Hello!";
}
// main.php
include 'helpers.php';
include 'helpers.php'; // Gây lỗi: Cannot redeclare function sayHello()
Giải pháp:
// main.php
include_once 'helpers.php';
include_once 'helpers.php'; // Không lỗi, hàm chỉ được định nghĩa một lần
Khi nào nên dùng _once?
- Khi nhúng các file chứa hàm, class, constant mà bạn không chắc chắn đã load chưa
- Trong kiến trúc phức tạp, khi nhiều file có thể cùng nhúng một dependency
5. Bảng so sánh 4 hàm

Dưới đây là bảng tổng hợp so sánh giữa include, require, include_once, và require_once:
| Hàm | File không tồn tại | Nhúng nhiều lần | Dừng chương trình |
|---|---|---|---|
include | Warning | Có | Không |
require | Fatal error | Có | Có |
include_once | Warning | Không | Không |
require_once | Fatal error | Không | Có |
Gợi ý sử dụng:
- Dùng
require_oncecho file quan trọng như config, autoload - Dùng
include_oncecho helper hoặc các thành phần có thể gọi lặp lại - Tránh dùng
includenếu file đó bắt buộc phải có
6. Những lỗi phổ biến khi dùng include/require
Gọi trùng file gây lỗi định nghĩa lại
Ví dụ: Một file chứa class được include trong cả header.php và main.php. Nếu không dùng _once, bạn sẽ gặp lỗi:
Fatal error: Cannot redeclare class ...
Giải pháp: Dùng require_once hoặc include_once
Đường dẫn sai khi include file trong folder lồng nhau
include 'config.php'; // Sai nếu file hiện tại không cùng folder với config.php
Giải pháp: Dùng đường dẫn tuyệt đối dựa trên __DIR__:
include __DIR__ . '/../config.php';
Biến không truyền đúng do phạm vi (scope)
Biến khai báo ở file cha có thể không được “thấy” trong file include nếu không truyền đúng cách. Ví dụ:
// main.php
$name = "TakiDev";
include 'greet.php';
// greet.php
echo "Hello, $name"; // Hoạt động vì include nằm cùng scope
Tuy nhiên, nếu bạn include trong một function thì biến ngoài sẽ không có hiệu lực:
function showGreet() {
include 'greet.php'; // $name không tồn tại trong scope này
}
Giải pháp: Truyền biến rõ ràng hoặc cấu trúc code lại hợp lý.
7. Best Practices khi nhúng file PHP

Tổ chức thư mục và file rõ ràng
- Tách rõ các loại file:
config/,includes/,views/,helpers/,services/, v.v. - Không để tất cả các file PHP trong root project.
- Đặt tên file rõ ràng theo nội dung bên trong (vd:
database.php,auth_helper.php).
Sử dụng đường dẫn tuyệt đối với __DIR__
Để tránh lỗi khi include file trong các folder lồng nhau hoặc khi file được gọi từ context khác (vd: CLI vs Web), nên dùng __DIR__:
require_once __DIR__ . '/../config/database.php';
Hạn chế include trong hàm (trừ khi cần thiết)
Dù PHP cho phép include bên trong function, nhưng cách làm này dễ gây rối và lỗi khó dò. Nên nhúng file ở đầu script, trong phần bootstrap hoặc autoload chính.
Dùng require_once mặc định cho các file định nghĩa class/hàm
Thói quen tốt để tránh lỗi trùng lặp và đảm bảo chương trình không chạy thiếu file quan trọng.
Ưu tiên sử dụng Autoload (PSR-4)
Nếu dự án có nhiều class, thay vì manual include, nên dùng autoload theo chuẩn PSR-4:
spl_autoload_register(function ($class) {
include __DIR__ . '/classes/' . $class . '.php';
});
Hoặc dùng composer:
composer init
// composer.json
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
Sau đó:
composer dump-autoload
Và chỉ cần gọi:
require_once 'vendor/autoload.php';
Câu hỏi thường gặp
include và require cái nào nhanh hơn?
Về tốc độ, chúng gần như không khác biệt đáng kể trong thực tế. Tuy nhiên, require thường được dùng cho các file bắt buộc, nên ưu tiên lựa chọn theo mục đích logic hơn là tốc độ.
Có nên luôn dùng require_once cho an toàn?
Không phải lúc nào cũng nên dùng require_once. Nếu bạn chắc chắn file sẽ chỉ được gọi đúng 1 lần, require là đủ và có thể nhanh hơn chút xíu. Tuy nhiên, trong dự án phức tạp, require_once giúp tránh lỗi trùng lặp, đặc biệt với file định nghĩa class.
Khi nào thì không cần include mà nên dùng autoload?
Khi bạn làm việc với nhiều class trong các folder khác nhau
Khi theo OOP và cần tự động nạp class khi khởi tạo
Khi dùng framework hoặc Composer
Autoload giúp bạn quản lý dependency sạch hơn, gọn hơn và theo chuẩn cộng đồng.








