Sự khác nhau giữa include, require, include_once, require_once

Sự khác nhau giữa include, require, include_once, require_once

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.

Khởi đầu website của bạn thật mạnh mẽ, mượt mà với hệ thống hosting cấu hình cao cấp tại AZDIGI.

2. Giới thiệu 4 hàm: include, require, include_once, require_once

image 43
Ảnh minh họa từ AI: Sự khác biệt giữa include và require

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 requireonce.
  • Đặ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àmKhi file không tồn tạiKết quả
includeGây warningTiếp tục chạy
requireGây fatal errorDừ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

image 44
Ảnh minh họa từ AI: về nhúng file trùng lặp

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_oncerequire_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ống include_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

image 45
Ảnh minh họa từ AI: 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àmFile không tồn tạiNhúng nhiều lầnDừng chương trình
includeWarningKhông
requireFatal error
include_onceWarningKhôngKhông
require_onceFatal errorKhông

Gợi ý sử dụng:

  • Dùng require_once cho file quan trọng như config, autoload
  • Dùng include_once cho helper hoặc các thành phần có thể gọi lặp lại
  • Tránh dùng include nế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.phpmain.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

image 46
Ảnh minh họa từ AI: 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

includerequire 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.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

For security, use of CloudFlare's Turnstile service is required which is subject to the CloudFlare Privacy Policy and Terms of Use.

scroll to top