classloader เป็นไลบรารี PHP สำหรับคลาส Autoloading การโหลดอัตโนมัติคลาสหมายความว่าคลาสจะถูกโหลดเฉพาะเมื่อจำเป็นจริง ๆ แทนที่จะต้องรวมไฟล์แต่ละคลาสในการดำเนินการทุกครั้ง สิ่งนี้จะช่วยลดการโหลดหน้าเว็บโดยเฉพาะบนเว็บไซต์ขนาดใหญ่เนื่องจากต้องโหลดไฟล์คลาสบางไฟล์เท่านั้น โดยปกติแล้วคลาสจะถูกโหลดแบบไดนามิกจากไฟล์ที่มีชื่อไฟล์ตามเนมสเปซและชื่อคลาส นอกจากนี้ยังทำให้ง่ายต่อการจัดการไฟล์คลาสจำนวนมาก
ห้องสมุดนี้รองรับมาตรฐานปัจจุบันสองมาตรฐานสำหรับคลาส Autoloading คือ PSR-0 และ PSR-4 แนวคิดพื้นฐานที่อยู่เบื้องหลังมาตรฐานเหล่านี้คือไฟล์คลาสอยู่ในไดเรกทอรีตามเนมสเปซและในไฟล์ที่ตั้งชื่อตามคลาส ความแตกต่างที่สำคัญระหว่างมาตรฐานทั้งสองนี้คือ PSR-4 ไม่ต้องการให้เนมสเปซทั้งหมดอยู่ในลำดับชั้นของไดเรกทอรี
อย่างไรก็ตามเนื่องจากการทำงานของการค้นหาไฟล์คลาสจริงมีแนวโน้มที่จะค่อนข้างแพงไลบรารีนี้จึงมีกลไกการแคชพื้นฐานที่อนุญาตให้แคชตำแหน่งไฟล์คลาสในไฟล์ PHP ด้วยการแคชความแตกต่างของประสิทธิภาพระหว่างการโหลดอัตโนมัติและการโหลดไฟล์ด้วยตนเองกลายเป็นเล็กน้อย
เอกสาร API ซึ่งสามารถสร้างได้โดยใช้ apigen สามารถอ่านออนไลน์ได้ที่: http://kit.riimu.net/api/classloader/
วิธีที่ง่ายที่สุดในการติดตั้งไลบรารีนี้คือการใช้นักแต่งเพลงเพื่อจัดการกับการพึ่งพาของคุณ ในการติดตั้งไลบรารีนี้ผ่านนักแต่งเพลงเพียงทำตามสองขั้นตอนเหล่านี้:
รับ composer.phar โดยเรียกใช้การติดตั้งบรรทัดคำสั่ง Composer ในรูทโครงการของคุณ
เมื่อคุณเรียกใช้สคริปต์การติดตั้งแล้วคุณควรมีไฟล์ composer.phar ในรูทโปรเจ็กต์ของคุณและคุณสามารถเรียกใช้คำสั่งต่อไปนี้:
php composer.phar require "riimu/kit-classloader:^4.4"
หลังจากติดตั้งไลบรารีนี้ผ่านนักแต่งเพลงคุณสามารถโหลดไลบรารีได้โดยรวมไฟล์ vendor/autoload.php ที่สร้างโดยนักแต่งเพลงในระหว่างการติดตั้ง
หากคุณคุ้นเคยกับวิธีการใช้นักแต่งเพลงอยู่แล้วคุณอาจเพิ่มไลบรารีเป็นอีกทางเลือกหนึ่งโดยเพิ่มไฟล์ composer.json ต่อไปนี้ลงในโครงการของคุณและเรียกใช้คำสั่ง composer install :
{
"require" : {
"riimu/kit-classloader" : " ^4.4 "
}
} หากคุณไม่ต้องการใช้ Composer เพื่อโหลดไลบรารีคุณสามารถดาวน์โหลดห้องสมุดด้วยตนเองได้ด้วยการดาวน์โหลดรุ่นล่าสุดและแยกโฟลเดอร์ src ไปยังโครงการของคุณ จากนั้นคุณสามารถรวมไฟล์ src/autoload.php ที่ให้ไว้เพื่อโหลดคลาสไลบรารี
ClassLoader รองรับการโหลดอัตโนมัติตามที่กำหนดโดยมาตรฐาน PSR-0 และ PSR-4 ผ่านวิธีการ addBasePath() และ addPrefixPath() ตามลำดับ คุณไม่จำเป็นต้องเข้าใจมาตรฐานเหล่านี้เพื่อใช้ห้องสมุดนี้เพียงใช้วิธีที่ดีที่สุดสำหรับคุณ
การโหลด AutoLoading คลาส PSR-0 กำหนดไฟล์คลาสจะต้องวางไว้ในแผนผังไดเรกทอรีที่สะท้อนเนมสเปซของพวกเขา ตัวอย่างเช่นคลาส 'foo bar baz' อาจอยู่ในไฟล์ '/path/to/classes/foo/bar/baz.php' วิธีนี้มักจะเป็นวิธีที่ง่ายที่สุดในการวางไฟล์คลาสของคุณ
การใช้วิธี addBasePath() คุณสามารถกำหนดไดเรกทอรีพื้นฐานที่จะมองหาคลาส ในการโหลดคลาสที่กล่าวถึงข้างต้นคุณสามารถใช้รหัสต่อไปนี้:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addBasePath ( ' /path/to/classes/ ' );
$ loader -> register ();
$ obj = new Foo Bar Baz ();หากไดเรกทอรีเฉพาะใช้กับเนมสเปซเฉพาะเท่านั้นคุณสามารถใช้พารามิเตอร์ที่สองเพื่อกำหนดเนมสเปซได้เช่นกัน อย่างไรก็ตามไดเรกทอรียังคงต้องชี้ไปที่ไดเรกทอรีพื้นฐานสำหรับเนมสเปซ ตัวอย่างเช่น:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addBasePath ( ' /path/to/classes/ ' , ' FooBar ' );
$ loader -> register ();
$ obj = new Foo Bar Baz ();โปรดทราบว่า PSR-0 ยังระบุว่าขีดเส้นใต้ในชื่อคลาสได้รับการปฏิบัติเป็นตัวคั่นเนมสเปซ (แต่ไม่ใช่ขีดเส้นใต้ในเนมสเปซ) ดังนั้นแม้ว่าชั้นเรียนของคุณจะถูกเรียกว่า 'foo bar_baz' ตัวอย่างทั้งสองข้างต้นจะยังคงทำงานอยู่ แม้ว่าเนมสเปซคลาสของคุณจะถูกกำหนดโดยใช้ขีดเส้นใต้ในชื่อคลาสคุณต้องใช้แบ็คสแลชในอาร์กิวเมนต์เนมสเปซ
ซึ่งแตกต่างจาก PSR-0 มาตรฐานการโหลดอัตโนมัติของคลาส PSR-4 ไม่จำเป็นต้องวางคลาสไว้ในแผนผังไดเรกทอรีที่สะท้อนเนมสเปซทั้งหมดของพวกเขา แต่ส่วนหนึ่งของเนมสเปซสามารถถูกแทนที่ด้วยเส้นทางที่เฉพาะเจาะจง
ตัวอย่างเช่นหากคลาส 'foo bar baz' ของคุณอยู่ในไฟล์ '/path/to/library/baz.php' คุณสามารถลงทะเบียนเส้นทางโดยใช้ addPrefixPath() และระบุเนมสเปซตามที่แสดงในตัวอย่างต่อไปนี้:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ( ' /path/to/Library/ ' , ' FooBar ' );
$ loader -> register ();
$ obj = new Foo Bar Baz (); สิ่งนี้ช่วยให้โครงสร้างไดเรกทอรีที่สั้นกว่ามากเนื่องจากเนมสเปซทั้งหมดไม่จำเป็นต้องสะท้อนให้เห็นในแผนผังไดเรกทอรี นอกจากนี้ยังเป็นไปได้ที่จะละเว้นอาร์กิวเมนต์เนมสเปซซึ่งในกรณีนี้เส้นทางจะทำงานเช่นเดียวกับเส้นทางที่เพิ่มผ่าน addBasePath() ยกเว้นข้อเท็จจริงที่ว่าขีดเส้นใต้ในชื่อคลาสจะไม่ได้รับการปฏิบัติเป็นตัวคั่นเนมสเปซ
ในขณะที่คุณสามารถเรียกใช้วิธีการเพิ่มเส้นทางหลายครั้ง แต่ก็เป็นไปได้ที่จะเพิ่มหลายเส้นทางโดยใช้อาร์เรย์ สิ่งนี้มักจะทำให้การกำหนดค่าง่ายขึ้นมาก ตัวอย่างเช่นคุณสามารถเพิ่มเส้นทางพื้นฐานหลายเส้นทางโดยการจัดเตรียมอาร์เรย์:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ([
' /path/to/classes/ ' ,
' /other/path/ ' ,
]);
$ loader -> register ();หรือคุณสามารถเพิ่มเส้นทางเฉพาะเนมสเปซโดยการจัดทำอาร์เรย์เชื่อมโยงที่กำหนดเนมสเปซโดยใช้คีย์อาร์เรย์:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ([
' FooBar ' => ' /path/to/classes/ ' ,
' OtherNamesapace ' => [ ' /other/path/ ' , ' /some/other ' ],
]);
$ loader -> register ();ดังที่แสดงในตัวอย่างด้านบนคุณยังสามารถจัดทำรายการเส้นทางสำหรับเนมสเปซเฉพาะ
การมองหาคลาสในระบบไฟล์ในแต่ละคำขอเป็นเรื่องที่มีราคาแพง ขอแนะนำอย่างยิ่งให้แคชตำแหน่งไฟล์เพื่อไม่ให้ค้นหาทุกคำขอ ท้ายที่สุดไฟล์คลาสไม่มีแนวโน้มที่จะย้ายไปรอบ ๆ ในระบบไฟล์
ไลบรารีนี้ให้ระบบแคชที่ง่ายมากผ่าน FileCacheClassLoader คลาสเก็บตำแหน่งไฟล์ในไฟล์ PHP เดียวซึ่งโหลดในทุกคำขอแทนที่จะค้นหาไฟล์ด้วยตนเอง
การใช้งาน FileCacheClassLoader ไม่แตกต่างจากการใช้ ClassLoader มากนัก คุณเพียงแค่ต้องจัดเตรียมเส้นทางไปยังไฟล์แคชที่เขียนได้ในตัวสร้าง ไฟล์จะถูกใช้เพื่อจัดเก็บตำแหน่งคลาสและจะถูกเขียนใหม่เมื่อค้นพบไฟล์คลาสใหม่ ตัวอย่างเช่น:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader FileCacheClassLoader ( __DIR__ . ' /cache.php ' );
$ loader -> addBasePath ( ' /path/to/classes/ ' );
$ loader -> register ();ห้องสมุดนี้เป็นลิขสิทธิ์ (c) 2012-2017 Riikka Kalliomäki
ดูใบอนุญาตสำหรับใบอนุญาตและข้อมูลการคัดลอก