परिचय
किसी अन्य PHP स्क्रिप्ट में परिभाषित क्लास का उपयोग करने के लिए, हम इसे include या require स्टेटमेंट्स के साथ शामिल कर सकते हैं। हालांकि, PHP की ऑटोलोडिंग सुविधा को ऐसी स्पष्ट समावेशन की आवश्यकता नहीं होती। इसके बजाय, जब किसी क्लास का उपयोग किया जाता है (इसके ऑब्जेक्ट की घोषणा के लिए आदि), तो PHP पार्सर इसे ऑटोमैटिकली लोड करता है, यदि इसे spl_autoload_register() फंक्शन के साथ रजिस्टर किया गया है। किसी भी संख्या में क्लासेज को इस प्रकार रजिस्टर किया जा सकता है। इस तरह PHP पार्सर को एरर उत्पन्न करने से पहले क्लास/इंटरफेस लोड करने का अंतिम मौका मिलता है।
सिंटैक्स
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
क्लास को उसकी संबंधित .php फाइल से तब लोड किया जाएगा जब यह पहली बार उपयोग में आएगी।
उदाहरण: ऑटोलोडिंग
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new test1();
$obj2 = new test2();
echo "objects of test1 and test2 class created successfully";
?>
आउटपुट
objects of test1 and test2 class created successfully
हालांकि, यदि क्लास डेफिनिशन वाली संबंधित .php फाइल नहीं मिलती है, तो निम्न त्रुटि प्रदर्शित होगी:
Warning: include(): Failed opening 'test10.php' for inclusion PHP Fatal error: Uncaught Error: Class 'test10' not found
एक्सेप्शन हैंडलिंग के साथ ऑटोलोडिंग
<?php
spl_autoload_register(function($className) {
$file = $className . '.php';
if (file_exists($file)) {
echo "$file included\n";
include $file;
} else {
throw new Exception("Unable to load $className.");
}
});
try {
$obj1 = new test1();
$obj2 = new test10();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
आउटपुट
Unable to load test10.
बेस्ट प्रैक्टिसेज
- PSR-4 ऑटोलोडिंग: आधुनिक PHP प्रोजेक्ट्स में Composer के PSR-4 ऑटोलोडर का उपयोग करें।
- नेमस्पेस मैपिंग: क्लास नाम को फाइल पथ में मैप करें (उदाहरण:
App\Controllers\UserController→src/Controllers/UserController.php)। - मल्टीपल ऑटोलोडर्स: spl_autoload_register() को कई बार कॉल करके कई ऑटोलोडर फंक्शन्स रजिस्टर कर सकते हैं।
- परफॉरमेंस: प्रोडक्शन में क्लास मैप बेस्ड ऑटोलोडिंग (Composer का optimize-autoloader) उपयोग करें।
महत्वपूर्ण नोट
spl_autoload_register() के बिना, PHP का डिफ़ॉल्ट __autoload() फंक्शन (अब डिप्रिकेटेड) उपयोग किया जाता था। हमेशा spl_autoload_register() को प्राथमिकता दें क्योंकि यह मल्टीपल ऑटोलोडर्स की अनुमति देता है।