การโหลดคลาสอัตโนมัติใน OOP ใน PHP
คุณทราบดีอยู่แล้วว่าเพื่อจะใช้งานคลาสใด ๆ
เราต้องเชื่อมต่อมันผ่าน require เมื่อในโปรเจกต์มี
คลาสจำนวนมาก ก็จะเกิดการเชื่อมต่อจำนวนมาก
ซึ่งเขียนได้ไม่สะดวกและควบคุมได้ยาก
เพื่อแก้ไขปัญหาดังกล่าวใน PHP จึงได้เพิ่ม การโหลดอัตโนมัติ ของคลาสขึ้น การโหลดอัตโนมัติ อนุญาตให้ PHP โหลดไฟล์คลาสโดยอัตโนมัติ เมื่อพยายามอ้างถึงคลาสนั้นในโค้ด อย่างไรก็ตาม คลาสจะไม่ถูกโหลดเอง ง่าย ๆ - จำเป็นต้องวางคลาสไว้ในโฟลเดอร์ ของเว็บไซต์ในลักษณะพิเศษ โดยทำตาม ข้อตกลงเกี่ยวกับชื่อไฟล์และโฟลเดอร์ของคลาส คุณสามารถใช้ข้อตกลงที่มีอยู่แล้วใน PHP, หรือคิดค้นข้อตกลงของคุณเองและใช้งานมัน
ก่อนอื่นมาดูข้อตกลงมาตรฐานของ PHP กัน ข้อตกลงนี้มีใจความว่า ถ้าเรามีไฟล์คลาสบางไฟล์ เส้นทางโฟลเดอร์ภายในเว็บไซต์ไปยังไฟล์นี้จะต้อง ตรงกับเนมสเปซของไฟล์ และชื่อไฟล์ จะต้องตรงกับชื่อของคลาส ที่เก็บอยู่ในนั้น ทั้งนี้ชื่อโฟลเดอร์และชื่อไฟล์ ต้องเป็นตัวพิมพ์เล็กทั้งหมด
มาดูตัวอย่างกัน สมมติว่าเรามี คลาสดังต่อไปนี้:
<?php
namespace Core\Admin;
class PageController
{
}
?>
ตามข้อตกลง คลาสนี้ควรตั้งอยู่
ในโฟลเดอร์ /core/admin/ ในไฟล์
pagecontroller.php
ทีนี้มาลองในไฟล์ index.php ใช้
คลาสของเรา โดยไม่ต้องเชื่อมต่อผ่าน require
แต่ใช้การโหลดอัตโนมัติแทน ในการนี้ที่จุดเริ่มต้น
ของไฟล์ซึ่งมีการเรียกใช้คลาส ควร
เรียกใช้ฟังก์ชัน spl_autoload_register
มาทำกัน:
<?php
spl_autoload_register(); // เปิดใช้งานการโหลดอัตโนมัติ
$obj = new Core\Admin\PageController; // สร้างออบเจกต์ได้อย่างสบายใจ
?>
ในไฟล์ index.php ให้เปิดใช้งานการโหลด
คลาสอัตโนมัติ โดยทำตามข้อตกลงเกี่ยวกับชื่อ
โฟลเดอร์และไฟล์ สร้างคลาส Core\User,
คลาส Core\Admin\Controller และคลาส
Project\User\Data ในไฟล์ index.php
ให้สร้างออบเจกต์ของคลาสเหล่านี้