⊗ppOpNsCA 107 of 107 menu

ฟังก์ชันสำหรับโหลดคลาสอัตโนมัติใน OOP PHP ด้วยตัวเอง

บ่อยครั้งที่ระบบโหลดอัตโนมัติมาตรฐานอาจไม่เหมาะกับคุณด้วยเหตุผลบางประการ ในกรณีเช่นนี้ คุณสามารถเขียนระบบโหลดอัตโนมัติของคุณเองได้

เพื่อทำสิ่งนี้ คุณต้องส่งผ่านฟังก์ชัน callback ที่คุณเขียนเป็นพารามิเตอร์แรกให้กับฟังก์ชัน spl_autoload_register ฟังก์ชันนี้จะถูกเรียกใช้เมื่อ PHP ตรวจพบการอ้างอิงถึงคลาสที่ยังไม่ได้โหลด ชื่อคลาสพร้อมกับเนมสเปซจะถูกส่งเข้ามาในพารามิเตอร์ของฟังก์ชันนี้:

<?php spl_autoload_register(function($class) { // ในตัวแปร $class จะมีชื่อคลาสพร้อมกับเนมสเปซ }); ?>

และหน้าที่ของฟังก์ชันคือการโหลดคลาสนั้นผ่าน require โดยใช้ชื่อคลาส นั่นคือภายในฟังก์ชันนี้เราต้องกำหนดกฎของเราเองสำหรับการโหลดคลาส นั่นคือข้อตกลงการตั้งชื่อของเราเอง

ลองเขียนตัวอย่างระบบโหลดอัตโนมัติของเราดู สมมติว่าเรากำหนดว่าเส้นทางไปยังไฟล์คลาสจากรูทของเว็บไซต์จะเหมือนกับเนมสเปซ แต่จะรักษาระบบตัวพิมพ์ (case) ไว้

นั่นคือ หากเรามีคลาส Core\Admin\PageController แล้ว เส้นทางไปยังคลาสควรเป็น Core/Admin/PageController.php

อย่างที่คุณเห็น การแปลงชื่อคลาสพร้อมเนมสเปซของมัน แค่ต้องเปลี่ยนแบ็กสแลชเป็นฟอร์เวิร์ดสแลช และเพิ่ม .php ต่อท้ายชื่อคลาส ลองทำดู:

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

อย่างไรก็ตาม เราจะได้เส้นทางไปยังไฟล์แบบสัมพัทธ์ (สัมพันธ์กับรูทของเว็บไซต์) ควรทำให้เป็นเส้นทางแบบสมบูรณ์ (absolute path) แบบนี้ดีกว่า:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

ยังมีรายละเอียดอีก ในระบบปฏิบัติการต่าง ๆ เส้นทางผ่านโฟลเดอร์อาจใช้ฟอร์เวิร์ดสแลชหรือแบ็กสแลช ทำให้โค้ดของเราไม่ขึ้นกับระบบปฏิบัติการ เพื่อทำสิ่งนี้ แทนที่จะใช้ฟอร์เวิร์ดสแลชสำหรับแยกเส้นทาง เราจะใช้ค่าคงที่ DIRECTORY_SEPARATOR ซึ่งมีสแลชที่ถูกต้องสำหรับระบบปฏิบัติการที่สคริปต์ของเรากำลังทำงานอยู่ ในที่สุดเราจะได้โค้ดต่อไปนี้:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

ลองทดสอบฟังก์ชันโหลดอัตโนมัติที่ฉันสร้างขึ้น

คิดค้นกฎการโหลดอัตโนมัติของคุณเองและนำไปปฏิบัติ

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ