نحوه استفاده از spl_autoload_register برای لودکردن فایل ها به صورت اتوماتیک در PHP

اگه با PHP برنامه نویسی میکنید و فایل های متفاوتی توی پروژه های خودتون دارید شاید include کردن فایل ها درون یکدیگر و ادرس دهی include ها براتون سخت باشه! مخصوصا اگه تعداد فایل های پروژه ی شما به مرور زمان زیاد بشه! در این اموزش میخوام به شما دوستان تابع spl_autoload_register رو معرفی کنم که خودش فایل های شما رو به صورت اتوماتیک براتون include میکنه!!!! اما یک سری نکات وجود داره که قبل از توضیح نحوه ی استفاده از این تابع باید ذکر کنم:

  • این تابع فقط وقتی فعال میشه که شما بخواید یک شی از روی یک کلاس بسازید یا اینکه بخواید یک trait رو درون کلاس خودتون use کنید.

  • این تابع رو میشه چندین بار استفاده کرد! یعنی اینکه میتونید چندین spl_autoload_register داشته باشید!

نحوه ی استفاده از تابع spl_autoload_register رو با یک مثال براتون توضیح میدم 😀 فرض کنید که ما ۲ کلاس داریم که ادرسشون به صورت زیر باشه :

کلاس اول من اسمش database باشه و ادرسش : core/database/database.php

کلاس دوم من اسمش makeform باشه و ادرسش : core/makeform/makeform.php

من به جای اینکه بیام هرجا که خواستم این دوتا فایل رو include کنم میام و یک فایل برای لود کردن این دوتا فایل میسازم! بعدش اون فایل رو توی صفحات خودم include میکنم. هرجا که من بخوام یک شی از روی کلاس خودم بسازم با توجه به نام کلاس تابع spl_autoload_register اجرا میشه و کلاس من رو به صفحه include میکنه!نحوه استفاده از تابع spl_autoload_register به صورت زیر خواهد بود:

من در دستورات بالا با استفاده از دستور switch مشخص کردم اگه نام class یا trait خودم برابر با database بود اونو از ادرس مورد نظری که دادم include کنه و اگه برابر با makeform بود اونو از ادرس مورد نظرم به صفحه اظافه کنه. من میتونم دستورات بالا که مربوط به include اتوماتیک کلاس ها هست رو درون یه فایل مثلا با نام config قرار بدم و هرجا خواستم فایل های خودم لود بشه فقط فایل config رو include کنم. دقت کنید که دستورات بالا وقتی یک کلاس رو به صفحه include میکنه که شما از روی کلاس شی بسازید! و همین باعث میشه که سرعت برنامه بالا بره 😀 و اینکه کار شما راحت تر بشه. از این به بعد فقط با دستکاری فایل config میتونید ادرس فایل های خودتون رو تنظیم کنید و اگه مثلا صدتا فایل داشته باشید نیاز نیست از صدجا برید ادرس include ها رو ویرایش کنید.

امیدوارم که این اموزش بدرد دوستان بخوره! دوستانی که سوالی دارند از بخش نظرات پایین همین پست مطرح کنند تا پاسخ بدم. موفق باشید.

به اشتراک بگذارید:Email this to someoneShare on FacebookTweet about this on TwitterShare on Google+Digg thisShare on LinkedInPin on PinterestShare on StumbleUponFlattr the authorShare on RedditBuffer this pageShare on TumblrPrint this pageShare on YummlyShare on VK
  1. این تابع چه تفاوتی با استفاده از :
    function __autoload($classname) {
    $filename = “./”. $classname .”.php”;
    include_once($filename);
    }

    دارد؟

    • تفاوت های زیادی دارن! اولا اینکه تابع autoload__ در ورژن های بعدی PHP امکانش هست Deprected بشه! و از بین بره
      تفاوت بعدی که داره در این هست که شما میتونید چندین تابع spl_autoload داشته باشید ولی تنها یک تابع autoload__ میتونید داشته باشید.
      من به شما پیشنهاد میکنم که اگه ورژن php شما بالاتر از ۵٫۴ است به هیچ وجه از تابع autoload__ استفاده نکنید!

  2. سلام مهدی جان
    خدا وکیلی یه آموزش واسه ایجکس کردن کل سایت بذار. هر کاری می کنم نمیشه.
    اسکریپت ایجکس هست ولی بخش ورود و عضویتش نیست. الان تقریباً ۲ ماه هست دارم روش کار می کنم… همین بخش همه چیو خراب کرده.
    هر کاری هم بگی آزمایش کردم نشده. از سایتای خارجی کمک گرفتم بازم نشده. اگر میتونی کمک کن 🙁
    اسکریپت رو اینجا نصب کردم:
    appest.ir
    مرسی

    • شما باید اول صفحه ای که اطلاعات فرم به اون ارسال میشه رو پیدا کنی(میتونی ادرسش رو از توی action فرم ببینی) بعدش با جاوا اسکریپت داده ها رو از فرم بگیری و به اون صفحه ارسال کنی! و با یه دستور preventDefault مانع رفرش شدن صفحه بشی.
      من الان تست کردم بخش عضویت ajax بود 😐
      قسمت لاگین هم ajax بود 😐

      • ajax نیست. وقتی اطلاعات رو وارد می کنیم یک بار صفحه ریلود میشه. در صورتی که برای مثال وقتی رو پیامها کلیک میکنیم یه نوار بالا نمایش داده میشه و صفحه عوض میشه.
        همون ریلود همه کارو خراب می کنه.
        اسکریپتو برات بفرستم با هزینه درستش می کنی؟

        • به من دسترسی های(ftp و cpanel یا directadmin یا هر مدیریت دیگه ای) لازم رو بدید براتون درستش میکنم اگه امکانش باشه. موفق باشید.

          • ایمیل شما رو دریافت کردم , سایت شما رو در یکی دو روز اینده بررسی میکنم بهتون اعلام میکنم از طریق ایمیلی که فرستادید.

  3. حسین

    سلام ممنون بازهم مثل همیشه عالی بود
    یک سوالی دارم که به این پست مربوط نمیشه
    من می خواهم یک cms طراحی کنم بعد برای برچسب های قسمتی است که بنویسم می خواستم ببینم این برچسب ها را کجا در سایت قرار دهم تا گوگل به عنوان برچسب بشناس مثل وردپرس که برای هر پست برچسب می نویسی و بعد هر پست قرار میگیره

    • شما باید درون دیتابیس خودتون به جدول جداگانه برای برچسب ها در نظر بگیرید, هر برچسب یک id خواهد داشت که درون جدول پست های خودتون میتونید id برچسب رو به پست خودتون نسبت بدید (کلید خارجی) بعد هربار که کاربر ادرس برچسب رو توی سایت شما بزنه شما میاید و توی پست ها میگیردید ببینید ایدی این برچسب برای کدوم پست هست و اون پست رو به کار بر نشون میدید.
      محلی که برای نمایش برچسب ها میشه در نظر گرفت در انتهای هر پست یا اینکه در صفحه دامه مطلب پست در انتهای sidebar میشه قرار داد. معمولا تگ ها رو در اخر صفحه قرار میدن یا اینکه با فونت کوچیک زیر هدر (عنوان) پست قرار میدن.

می‌خواهید دیدگاهتان را بیان کنید؟