แยกเว็บไซต์ของคุณออกเป็นไฟล์ที่นำกลับมาใช้ซ้ำได้ด้วย include และ require พร้อมโครงสร้างโปรเจกต์ที่ชัดเจน และค่าคงที่ที่รวมไว้ที่เดียว
เปิดบทเรียนนี้ใน Kodokonทันทีที่เว็บไซต์ของคุณโตเกินสองหน้า การทำซ้ำส่วนหัว ส่วนท้าย และฟังก์ชันในทุกไฟล์จะกลายเป็นเรื่องที่จัดการไม่ไหว PHP มีคำสั่งสำหรับการรวมไฟล์อยู่สี่แบบ ได้แก่ include, require และรุ่นย่อยของมันคือ include_once / require_once ทั้งหมดล้วนแทรกเนื้อหาของไฟล์ ณ จุดที่เรียกใช้ ความแตกต่างอยู่ที่การจัดการข้อผิดพลาดและการรวมซ้ำ รุ่น _once จะคอยติดตามไฟล์ที่โหลดไปแล้วและรวมมันเพียงครั้งเดียว จำเป็นอย่างยิ่งสำหรับไฟล์ฟังก์ชัน ซึ่งไม่สามารถประกาศซ้ำได้
<?php
declare(strict_types=1);
function e(string $value): string
{
return htmlspecialchars($value, ENT_QUOTES);
}
function formatPrice(float $amount): string
{
return number_format($amount, 2, '.', ',') . ' €';
}โครงสร้างโปรเจกต์ที่ชัดเจนมีค่ายิ่งกว่าคอมเมนต์นับพัน ธรรมเนียมที่พบบ่อย: public/ เก็บหน้าเว็บที่ส่งให้เบราว์เซอร์ (เป็นโฟลเดอร์ เดียว ที่เปิดเผยสู่ภายนอก) src/ รวบรวมการตั้งค่าและฟังก์ชัน templates/ บรรจุชิ้นส่วนของหน้า (header.php, footer.php) เซิร์ฟเวอร์สำหรับพัฒนาที่มากับ PHP เริ่มทำงานได้โดยชี้ไปที่ public/
mkdir -p my-site/public my-site/src
mkdir -p my-site/templates
cd my-site
php -S localhost:8000 -t publicค่าที่ตายตัวของโปรเจกต์ (ชื่อเว็บไซต์ พาธ การตั้งค่า) สมควรเป็น ค่าคงที่ (constant) มากกว่าตัวแปร เพราะมันจะไม่ถูกเขียนทับโดยบังเอิญ const ถูกแปลงค่าในตอนคอมไพล์ ส่วน define() ในตอนรันไทม์ ในทางปฏิบัติ ให้เลือกใช้ const ในไฟล์ตั้งค่าของคุณ สำหรับพาธ จงนำหน้าด้วย __DIR__ เสมอ ซึ่งคือโฟลเดอร์ของไฟล์ปัจจุบัน การรวมไฟล์ของคุณจะทำงานได้ไม่ว่าจะรันสคริปต์มาจากที่ใด
<?php
declare(strict_types=1);
const SITE_NAME = 'La Bonne Pizza';
const ITEMS_PER_PAGE = 12;
const UPLOAD_DIR = __DIR__ . '/../public/uploads';
define('BASE_URL', 'http://localhost:8000');จากนั้นแต่ละหน้าก็กลายเป็นการประกอบสั้น ๆ โหลดการตั้งค่าและฟังก์ชันด้วย require แล้วจึงรวมเทมเพลตไว้รอบ ๆ เนื้อหาเฉพาะของหน้านั้น
<?php
require __DIR__ . '/../src/config.php';
require_once __DIR__ . '/../src/functions.php';
$pageTitle = SITE_NAME . ' - Home';
include __DIR__ . '/../templates/header.php';
?>
<main>
<h1><?= e($pageTitle) ?></h1>
<p>Pizza of the day: <?= formatPrice(9.5) ?></p>
</main>
<?php include __DIR__ . '/../templates/footer.php'; ?>