0Pricing
PHP Academy · บทเรียน

การรวมและเรียกใช้ไฟล์

แบ่งหน้าเว็บเป็นส่วนที่นำกลับมาใช้ใหม่ได้ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แท็ก PHP และไวยากรณ์การฝังโค้ด
  2. HTML แบบไดนามิกด้วยลูป PHP
  3. การรวมและเรียกใช้ไฟล์
  4. รูปแบบเทมเพลต: แยกตรรกะออกจากมุมมอง
← กลับไปที่ PHP Academy