آموزش Autoloading کلاس ها با Composer

  • خانه
  • آموزش Autoloading کلاس ها با Composer
Image تحقیقات

آموزش Autoloading کلاس ها با Composer

سلام خدمت شما دوستان عزیز

امروز می خواهم درباره Autoloading در php صحبت کنم . قبلا در مقاله ی ” composer چیست ؟ ”  درباره ی composer و طریقه کار با اون و همچنین نصب Composer در محیط های ویندوز و لینوکس صحبت کردیم . (پیشنهاد می کنم اگر با composer آشنا نیستین حتما اون مقاله را مطالعه کنید)

ولی امروز میخواهم به صورت اختصاصی تر درباره ی نحوه autoload کردن کلاس ها با استفاده از composer صحبت کنم . همانطور که می دانیم در php برای استفاده از هر کلاسی باید اون کلاس رو در صفحه ای که لازم داریم include یا require کنیم تا php آن کلاس را بشناسد و بتوان از آن استفاده کرد . خب مشکل اینجاست که اگر تعداد کلاس های مورد استفاده زیاد شود این include کردن هر کلاس واقعا مشکل ساز میشه و تمرکز مارو کم می کنه و بیشتر وقتمون میره سمت اینکه کلاس ها در داخل کدام دایرکتوری هستند و تک تک آن ها را به صفحه ی خودمون include کنیم .

خوشبختانه composer این مشکل را برای ما حل کرده و خودش این موضوع را به عهده می گیرد و ما فقط کافی است بسته به نیازمون یکی از 4 روش زیر را که در فایل composer.json می باشد استفاده نماییم . داخل فایل composer آبجکتی به نام autoload وجود دارد که داخل آن تعریف می کنیم که چه فایل هایی را و از چه طریق برای ما autoload بسازد.

4 روش :

  • File Based Autoloading
  • Classmap Based Autoloading
  • PSR-0 Autoloading
  • PSR-4 Autoloading

سایت اصلی composer روش PSR-4 Autoloading را پیشنهاد می کند اما ما در این مقاله  هر 4 روش را بررسی می نماییم .

File Based Autoloading

خب برای شروع یک مثال ساده از File Based Autoloading را پیاده سازی می کنیم .

  1. در روت (root) پروژه خودتون یک فولدر به نامaldemo ایجاد کنید .
  2. سپس داخل فولدرaldemo یک فولدر دیگر به نام mylibrary ایجاد می کنیم تا فایل های خودمون را داخل اش قرار بدهیم .
  3. داخل فولدر mylibrary یک فایل به نام functions.php ایجاد می کنیم .تا کدهایی راداخل اش قرار دهیم .
  4. داخل function.php کدهای زیر را قرار دهید :
  5. <?php
     
    function lego () {
        return 'You are now a master builder.';
    }
    1. حالا داخل روت (root) پروژه امون فایل composer.json را برای Autoload کردن فایل function.php ایجاد می کنیم .
    2. داحل فایل composer.json کدهای زیر را قرار می دهیم :
    3. {
          "autoload": {
              "files": ["aldemo/mylibrary/functions.php"]
          }
      }
  1. همانطور که در بالا مشاهده می کنید یک آبجکت به نام autoload داریم و داخل آن  مشخص کردیم که به چه روشی autoload برای ما ساخته شود . ما روش files را تعیین کردیم و جلوی آن فایل هایی که لازم داریم به صورت autoload درایند و در تمام پروژه در دسترس باشند را مشخص می کنیم .
  2. حالا برای ایجاد autoload باید ترمینال را باز کرده و به روت پروژه بروید و یکی از دستورات زیر را اجرا کنید :
  3. composer dump
    یا
    composer dumpautoload
  1. بعد از اجرای فرمان بالا و زدن دکمه اینتر مشاهده می کنید که در روت پروژه , فولدری به نام vendor ساخته می شود .
  2. اگر تمام مراحل بالا به درستی انجام شده باشد, فرایند ساخت autoload به وسیله composer و از روش files به موفقیت به اتمام رسیده است . حالا برای استفاده از فایل function.php کافی است در روت پروژه اتون فایلی به نام index.php ایجاد کنید و کدهای زیر را قرار دهید :
  3. <?php
     require 'vendor/autoload.php';
    echo lego();
  1. در کدهای بالا در خط اول لازم بود که autoload.php را به فایل index امان require کنید . و در خط بعدی از فانکشن lego که در فایل function.php موجود هست استفاده کردیم .

اگر لازم بود فایل دیگری را نیز به صورت autoload در بیاورید کافی است همان مراحل بالا را نیز برای آن فایل انجام دهید :

یعنی ابتدا فایل به نام helper.php را در کنار فایل function.php ایجاد کنید  و کدهای زیر را در آن قرار دهید ‌:

<?php
function getName()
{
	echo 'Alihossein';
}

سپس سراغ فایل composer.json بروید و ادرس این فایل را نیز اضافه کنید :

{
    "autoload": {
        "files": ["aldemo/mylibrary/functions.php" ,"aldemo/mylibrary/helper.php"]
    }
}

حالا دستور composer dump را در ترمینال اجرا کنید تا فایل های داخل پوشه vendor که همان سازنده های autoload پروژه هستند آپدیت بشوند.

و در نهایت از تابع getName به راحتی در فایل index.php استفاده کنید :

<?php
 require 'vendor/autoload.php';
echo lego();
echo getName();

خب تو این جلسه روش File Based Autoloading را باهم بررسی کردیم . حتما خودتون دوباره امتحان کنید . روش های بعدی را در مقاله ی بعدی قرار خواهم داد .

راستی کدهای بالا هم به منظور راحتی شما , برای دانلود قرار داده شده است .

دانلود فایل این جلسه