การรวมและเรียกใช้ไฟล์
แบ่งหน้าเว็บเป็นส่วนที่นำกลับมาใช้ใหม่ได้ด้วย include และ require
การรวมและเรียกใช้ไฟล์ เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
การนำโค้ดกลับมาใช้ใหม่ด้วยการรวมไฟล์
PHP มีคำสั่งสี่รายการสำหรับรวมโค้ดจากไฟล์อื่น:
include— รวมไฟล์และแจ้งเตือนเมื่อไม่พบrequire— รวมไฟล์และทำให้เกิดข้อผิดพลาดร้ายแรงเมื่อไม่พบinclude_once— รวมไฟล์เฉพาะเมื่อยังไม่เคยรวมมาก่อนrequire_once— เรียกใช้ไฟล์เฉพาะเมื่อยังไม่เคยรวมมาก่อน
include และ require
ข้อแตกต่างสำคัญคือ หากไม่พบไฟล์ require จะทำให้การทำงานหยุดลง ส่วน include จะแจ้งเตือนเท่านั้น:
<?php
// Fatal error if missing — use for critical files
require 'config.php';
require 'database.php';
// Warning if missing, but execution continues
include 'optional_plugin.php';
// Use __DIR__ for reliable relative paths:
require __DIR__ . '/helpers/utils.php';include_once และ require_once
รูปแบบที่ลงท้ายด้วย _once จะป้องกันไม่ให้รวมไฟล์เดียวกันหลายครั้ง:
<?php
// Without _once: including twice redefines functions
include 'functions.php';
include 'functions.php'; // Fatal: function redefined!
// With _once: second include is a no-op
require_once 'functions.php';
require_once 'functions.php'; // safe — skipped
// Rule: use require_once for class and function definition filesขอบเขตตัวแปรในไฟล์ที่รวม
ไฟล์ที่รวมจะใช้ขอบเขตเดียวกับไฟล์ที่รวมไฟล์นั้นเข้ามา แต่ไม่ใช่ขอบเขตของฟังก์ชัน:
<?php
// main.php
$title = 'My Site';
require 'header.php'; // header.php can use $title
// But in a function:
function loadTemplate(): void {
require 'header.php'; // $title is NOT accessible here!
// Must pass data explicitly
}การส่งคืนค่าจากไฟล์ที่รวม
ไฟล์ที่รวมสามารถส่งคืนค่าโดยใช้คำสั่ง return:
<?php
// config.php content:
// return ['debug' => true, 'db_host' => 'localhost'];
// main.php:
$config = require 'config.php';
echo $config['db_host']; // localhost
// Common pattern for configuration files that return arraysการสร้างโครงร่างหน้าอย่างง่าย
แยกหน้าออกเป็นไฟล์ส่วนหัว เนื้อหา และท้ายหน้า ซึ่งสามารถนำกลับมาใช้ใหม่ได้:
<?php
// index.php
$pageTitle = 'Home Page';
$bodyClass = 'home';
require_once 'partials/header.php';
?>
<main class="container">
<h1>Welcome!</h1>
<p>Main content goes here.</p>
</main>
<?php require_once 'partials/footer.php'; ?>ส่วนย่อยของแม่แบบ
สร้างไฟล์มุมมองส่วนย่อยที่นำกลับมาใช้ใหม่ได้สำหรับองค์ประกอบที่ปรากฏซ้ำ:
<?php
// partials/card.php
// Expects: $card['title'], $card['body'], $card['url']
?>
<div class="card">
<h3><a href="<?= htmlspecialchars($card['url']) ?>">
<?= htmlspecialchars($card['title']) ?>
</a></h3>
<p><?= htmlspecialchars($card['body']) ?></p>
</div>การส่งตัวแปรไปยังส่วนย่อย
ส่งข้อมูลไปยังส่วนย่อยด้วยการกำหนดค่าตัวแปรเฉพาะที่ก่อนรวมไฟล์:
<?php
$articles = getArticles();
foreach ($articles as $article) {
$card = [
'title' => $article['title'],
'body' => substr($article['body'], 0, 100) . '...',
'url' => '/articles/' . $article['slug'],
];
require 'partials/card.php';
}include เทียบกับการโหลดอัตโนมัติ
ใน PHP สมัยใหม่ที่ใช้คอมโพสเซอร์ ไฟล์คลาสจะถูกโหลดโดยอัตโนมัติ คุณจึงไม่ต้องรวมไฟล์เหล่านั้นด้วยตนเอง:
<?php
// Old way (manual includes):
require 'classes/User.php';
require 'classes/Post.php';
// Modern way (Composer autoloading):
require __DIR__ . '/vendor/autoload.php';
// Classes are loaded automatically when first used
$user = new User(); // User.php loaded by autoloader
$post = new Post(); // Post.php loaded by autoloaderความปลอดภัย: ป้องกันการเจาะทะลุเส้นทางไฟล์
อย่ารวมไฟล์โดยอิงจากข้อมูลนำเข้าของผู้ใช้ที่ยังไม่ได้ตรวจสอบ:
<?php
// DANGEROUS:
$page = $_GET['page'];
include $page . '.php'; // allows ../../etc/passwd
// SAFE: whitelist allowed pages
$allowed = ['home', 'about', 'contact'];
$page = $_GET['page'] ?? 'home';
if (!in_array($page, $allowed)) {
$page = 'home';
}
include __DIR__ . '/pages/' . $page . '.php';การกำหนดค่า include_path
กำหนดค่า include_path ของ PHP เพื่อให้สามารถรวมไฟล์ได้โดยไม่ต้องระบุเส้นทางแบบเต็ม:
<?php
// Current include_path:
echo get_include_path();
// Add your library directory:
set_include_path(
get_include_path() . PATH_SEPARATOR . '/var/www/lib'
);
// Now you can include without full path:
include 'helpers.php'; // found in /var/www/lib/helpers.phpตรวจสอบความเข้าใจ
เมื่อไม่พบไฟล์ include และ require แตกต่างกันอย่างไร
ทบทวน: การรวมไฟล์
สรุป:
require— ทำให้เกิดข้อผิดพลาดร้ายแรงเมื่อไม่พบ เหมาะสำหรับไฟล์สำคัญinclude— แจ้งเตือนเมื่อไม่พบ เหมาะสำหรับไฟล์ทางเลือก- รูปแบบที่ลงท้ายด้วย _once จะป้องกันการโหลดซ้ำ
- ไฟล์ที่รวมจะใช้ขอบเขตตัวแปรของผู้เรียกไฟล์ร่วมกัน
- ไฟล์สามารถส่งคืนค่าด้วย
return - อย่ารวมเส้นทางจากข้อมูลนำเข้าของผู้ใช้ ให้ใช้เฉพาะรายการที่อนุญาตเท่านั้น
คำถามที่พบบ่อย
บทเรียน “การรวมและเรียกใช้ไฟล์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การรวมและเรียกใช้ไฟล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การรวมและเรียกใช้ไฟล์”
แบ่งหน้าเว็บเป็นส่วนที่นำกลับมาใช้ใหม่ได้ด้วย include และ require คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การรวมและเรียกใช้ไฟล์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แท็ก PHP และไวยากรณ์การฝังโค้ด
- HTML แบบไดนามิกด้วยลูป PHP
- การรวมและเรียกใช้ไฟล์
- รูปแบบเทมเพลต: แยกตรรกะออกจากมุมมอง