Farzin.bidokhti
Farzin.bidokhti
خواندن ۴ دقیقه·۲ سال پیش

کامپوزر چگونه فایل های PHP را Autoload می کند؟

کامپوزر composer
کامپوزر composer


کامپوزر (Composer) چیست؟

کامپوزر ابزاری برای مدیریت وابستگی ها (کتابخونه ها، پکیج ها) در پی اچ پی است.

بارگذاری خودکار (Autoloading) چیست؟

برای بارگذاری فایل ها ما از دو تابع ()include یا ()require استفاده می کنیم. بارگذاری خودکار به این معنی است فایل هایی که مورد نیاز پروژه ما است به صورت خودکار بارگذاری می شوند. بارگذاری خودکار به ما این اجازه را می دهد که فایل های خودمان را بدون استفاده کردن از دو تابع ()include یا ()require در پروژه استفاده کنیم.

چرا ما به بارگذاری خودکار (Autoloading) احتیاج داریم؟

استفاده کردن از دو تابع ()include یا ()require مشکلی بوجود نمیاورد اما این دوتابع برای بارگذاری فایل های پروژه هایی که کوچک هستن راه حل خوبی است، اما برای پروژه های بزرگ راه حل مناسبی نیست.

بارگذاری خودکار (Autoloading) چگونه کار می کند؟

public function autoloader($className) { include '/libs/' . $className . '.php'; } spl_autoload_register('autoloader'); $object = new Sample();

در این قطعه کد ما از تابع spl_autoloader_register که مربوط به PHP است استفاده کردیم. , و این تابع، تابع ما را register می کند. در ابتدا PHP تابع autoloader ما را ثبت کرده است و زمانی که ما نمونه سازی می کنیم تابع autoloader، کلاس مورد نیاز (Sample) را include می کند.

انواع بارگذاری خودکار (autoloading):

  • Files
  • Classmap
  • PSR-0
  • PSR-4

انواع بارگذاری و قوانین آن ها را ما می توانیم در فایل composer.json تعریف کنیم.

بارگذاری خودکار به روش Files:

بارگذاری خودکار به روش Files، شبیه کار با include یا require می باشد و تمام سورس فایل را بارگذاری می کند. تمام سورس فایل هایی که در کلید files تعریف می شود در هر بار اجرای برنامه بارگذاری می شوند. برای استفاده کردن از روش بارگذاری Files، ما لیستی از فایل های خود را مانند کد زیر در کلید files که در فایل composer.json قرار دارد می گذاریم:

{ &quotautoload&quot : { &quotfiles&quot : [&quotlib/Book.php&quot, &quotlib/User.php&quot] } }

در مرحله بعدی ما باید از دستور composer dump-autoload استفاده کنیم تا فایل های مورد نیاز بارگذاری خودکار ایجاد شود. در آخر فایل autoload.php را که در پوشه vendor قرار دارد را در خط اول فایل ای که قرار است بارگذاری فایل ها انجام شود قرار می دهیم.

<?php require &quotvendor/autoload.php" ?>

بارگذاری خودکار به روش Classmap:

بارگذاری خودکار به روش classmap نسخه بهبود یافته از بارگذاری Files می باشد. در این روش ما فقط لیستی از پوشه هایی که کلاس های ما در آن قرار دارد را در کلید classmap قرار می دهیم. مانند نمونه کد زیر:

{ &quotautoload&quot : { &quotclassmap&quot : [&quotlib&quot] } }

سپس دستور composer dump-autoload را اجرا می کنیم. تمامی فایل های ما در پوشه lib آماده بارگذاری خودکار هستند.

بارگذاری خودکار به روش PSR-0:

بارگذاری خودکار به روش PSR-0 استاندارد ای هست که توسط گروه PHP-FIG پیشنهاد شده است. در این روش ما باید از فضاهای نام namespaces استفاده کنیم با ساختار:

\<vendor name>\<namespace>\*<Class name>

همچنین کلاس های ما باید با همین ساختار پوشه ذخیره شده باشند در ادامه با هم نگاهی به فایل composer می اندازیم:

{ &quotautoload&quot : { &quotpsr-0&quot : { &quotLib\\Sample&quot : &quot/src&quot } }
}

در این جا ما به کامپوزر می گوییم که هر موقع فضای نام Lib\Sample صدا زده شد، این فایل در مسیر زیر قرار دارد:

src\Lib\Sample

لطفا به نمونه کد زیر توجه کنید:

<?php namespace Lib\Sample; Class User { // ... } ?> ------------------------------------------------------------------------------------ <?php require &quotvendor/autoload.php" $object = new Lib\Sample\User(); ?>

بارگذاری خودکار به روش PSR-4:

بارگذاری خودکار به روش PSR-4 همانند استاندارد PSR-0 استُ اما در این روش نیازی نیست ساختار پوشه بندی را در فضاهای نام (namespaces) تقلید کنیم. در روش PSR-0 فضاهای نام ما بر اساس ساختار پوشه بندی است. لطفا به محتویات فایل کامپوزر توجه کنید:

{ &quotautoload&quot : { &quotpsr-4&quot : { &quotLib\\Sample\\&quot : &quot/src&quot } }
}

متوجه تفاوت فایل کامپوزر با فایل کامپوزر در روش قبل شدید؟

بله درسته، در این روش ما در آخر فضای نام از backslash استفاده کردیم (\). ما در این روش به کامپوزر می گوییم که هر چیزی با فضای نام Lib\Sample شروع شد، تمامی فایل ها در پوشه src در دسترس هستند و نیازی نیست که ما پوشه های Lib و Sample ایجاد کنیم.


نتیجه

در این مقاله ما توانستیم با کامپوزر، نحوه بارگذاری خودکار و انواع روش های بارگذاری خودکار آشنا شویم.

موفق باشید.

composerphp
برنامه نویس - عاشق کار تیمی ام و دارم کم کم کارتیمی رو یاد میگیرم - این طبیعتو با همه چیزش دوست دارم.
شاید از این پست‌ها خوشتان بیاید