Autoloading Classes
Autoloading क्यों
असली project में दर्जनों class files हो सकती हैं। हर एक के लिए require line लिखना थकाऊ है और गलती आसान। Autoloading PHP को class file अपने-आप ढूँढने और include करने देता है जब आप वो class पहली बार इस्तेमाल करें — तो loading logic एक बार लिखिए, हर file के लिए नहीं।
require पूरी तरह नहीं हटाता — autoloader एक बार require कीजिए, फिर classes खुद load होती हैं।पुराना तरीका: कई requires
Autoloading बिना, हर file हाथ से include करनी पड़ती है:
<?php
require "User.php";
require "Product.php";
require "Order.php";
// ... और हर class के लिए ऐसे ही
?>
यह जल्दी बेकाबू हो जाता है, और एक line भूलने से "class not found" error आती है। Autoloading बिल्कुल यही हल करता है।
spl_autoload_register
एक function register कीजिए जो class नाम को file path में बदलकर include करे।
<?php
spl_autoload_register(function ($class) {
require __DIR__ . "/classes/" . $class . ".php";
});
// User के लिए require नहीं चाहिए — अपने-आप load:
$u = new User();
?>
अब जब PHP पहली बार new User() देखती है, वो आपका function call करती है, जो classes/User.php include करता है। folder में और classes जोड़िए, वो बस चल जाती हैं।
Composer autoload (PSR-4)
आधुनिक PHP में Composer PSR-4 standard से autoloading संभालता है। composer.json में:
{
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
composer dump-autoload चलाने के बाद, autoloader एक बार include कीजिए:
<?php
require "vendor/autoload.php";
use App\Models\User;
$u = new User(); // src/Models/User.php से अपने-आप load
?>
PSR-4 App\ namespace को src/ folder से map करता है, तो App\Models\User src/Models/User.php पर मिलती है — कोई manual require नहीं।
आम गलतियाँ
- File नाम class नाम से न मिलना। Autoloader path class नाम से बनाता है — वे बिल्कुल मेल खाने चाहिए, case समेत।
- Path में गलत folder। अगर class autoloader की उम्मीद से अलग folder में हो, वो नहीं मिलेगी।
composer dump-autoloadभूलना। नई namespaced classes जोड़ने के बाद autoloader दोबारा generate कीजिए।- Namespace PSR-4 mapping से न मिलना। Namespace prefix mapped folder से मेल खाना चाहिए।
सारांश
- Autoloading class files पहली बार इस्तेमाल पर अपने-आप load करती है।
- यह कई
requirelines को एक setup से बदल देती है। spl_autoload_registerComposer बिना built-in तरीका है।- Composer + PSR-4 namespace को folder से map करके सब autoload करता है।
- Class नाम और file नाम (और namespace व folder) मेल खाने चाहिए।
आगे, classes व्यवस्थित कीजिए namespaces से, या पूरा app structure कीजिए MVC pattern से।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
PHP में autoloading क्या है?
require line लिखने की ज़रूरत नहीं। यह बड़े projects को साफ़ और आसान रखता है।spl_autoload_register क्या करता है?
Composer autoload क्या है?
require "vendor/autoload.php"; जोड़िए, और आपकी सारी classes व install की libraries अपने-आप load हो जाती हैं।PSR-4 क्या है?
App\ को src/ folder से। इसका पालन Composer को किसी class file को उसके namespaced नाम से अपने-आप ढूँढने देता है।क्या autoloading के साथ भी require चाहिए?
spl_autoload_register setup या vendor/autoload.php)। उसके बाद अलग-अलग class files खुद load होती हैं — per-class require नहीं।