spl_autoload_register()
ช่วยให้คุณสามารถลงทะเบียนฟังก์ชั่นหลาย ๆ อย่าง (หรือวิธีการคงที่จากคลาส Autoload ของคุณเอง) ที่ PHP จะใส่ลงในสแต็ก / คิวและโทรตามลำดับเมื่อมีการประกาศ "คลาสใหม่"
ตัวอย่างเช่น:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
ในตัวอย่างด้านบน "MyClass" เป็นชื่อของคลาสที่คุณพยายามสร้างอินสแตนซ์ PHP ส่งชื่อนี้เป็นสตริงไปspl_autoload_register()
ซึ่งช่วยให้คุณสามารถเลือกตัวแปรและใช้เพื่อ "รวม" คลาส / ไฟล์ที่เหมาะสม . ดังนั้นคุณไม่จำเป็นต้องรวมคลาสนั้นผ่านทางคำสั่ง include / require ...
เพียงแค่เรียกคลาสที่คุณต้องการยกตัวอย่างเช่นในตัวอย่างข้างต้นและเมื่อคุณลงทะเบียนฟังก์ชั่น (ผ่านspl_autoload_register()
) ของคุณเองที่จะคิดออกว่าที่ตั้งของชั้นเรียนของคุณทั้งหมด PHP จะใช้ฟังก์ชั่นนั้น
ข้อดีของการใช้งานspl_autoload_register()
คือ__autoload()
คุณไม่จำเป็นต้องใช้ฟังก์ชั่น autoload ในทุกไฟล์ที่คุณสร้าง spl_autoload_register()
ยังช่วยให้คุณสามารถลงทะเบียนฟังก์ชั่น autoload หลาย ๆ อันเพื่อเพิ่มความเร็วในการโหลดอัตโนมัติและทำให้มันง่ายยิ่งขึ้น
ตัวอย่าง:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
เกี่ยวกับspl_autoload , สถานะด้วยตนเอง:
__autoload()
ฟังก์ชั่นนี้มีวัตถุประสงค์เพื่อใช้เป็นเริ่มต้นใช้งานสำหรับ หากไม่มีอะไรอื่นที่ระบุไว้และspl_autoload_register()
จะเรียกว่าไม่มีพารามิเตอร์ใด ๆ แล้วฟังก์ชั่นนี้จะถูกนำมาใช้สำหรับการโทรใด ๆ __autoload()
ในภายหลังจะ
ในทางปฏิบัติมากขึ้นหากไฟล์ทั้งหมดของคุณอยู่ในไดเรกทอรีเดียวและแอปพลิเคชันของคุณใช้ไม่เพียง แต่ไฟล์. php เท่านั้น แต่ไฟล์กำหนดค่าแบบกำหนดเองที่มีนามสกุล. inc เช่นกลยุทธ์หนึ่งที่คุณสามารถใช้คือเพิ่มไดเรกทอรีของคุณที่มีทั้งหมด ไฟล์ไปยัง PHP รวมถึงเส้นทาง (ผ่านset_include_path()
)
และเนื่องจากคุณต้องการไฟล์กำหนดค่าของคุณเช่นกันคุณจะใช้spl_autoload_extensions()
เพื่อแสดงรายการส่วนขยายที่คุณต้องการให้ PHP ค้นหา
ตัวอย่าง:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
เนื่องจาก spl_autoload เป็นการใช้งานเริ่มต้นของ__autoload()
วิธีเวทย์มนตร์ PHP จะเรียก spl_autoload เมื่อคุณลองและยกตัวอย่างคลาสใหม่
หวังว่านี่จะช่วย ...