autoloading و namespace ها

پرسیده شده
فعالیت 1147 روز پیش
دیده شده 489 بار
0

سلام ، میخواستم بدونم آیا توی autoloader به صورت خودکار متوجه میشن که ساختار namespace ما با فولدربندی یکیه؟

فایل پیوست

Danial Rahimi
Danial Rahimi

21 اسفند 99

3
حذف شده

سلام و احترام

شما طیق namespaceی که میدید مشخص میشه که دقیقا پوشه های شما با چه اسمی هستند و چه جورین

برای مثال namespace زیر:

namespace App\Http\Controllers\Admin\KYC;

کلاس داخل همچین فولدی هست:

- app
   - Http
   		- Controllers
   			- Admin
   				- KYC
   					. Class.php

توی قرار دادن namespace شما اسمی از کلاس نمیارید و فقط از پوشه پدر شروع میکنید به نام گذاری تا به کلاس برسید.

 

توجه داشته باشید که توی composer.json کانفیگ autoloading به این صورت هستش:

   "autoload": {
        "psr-4": {
            "App\\": "app/",

        }
    },

توی کانفیگ بالا گفتیم که اول هر namespaceی کلمه App بود ینی اینکه داره به پوشه app اشاره میکنه

 

یه مثال دیگه هم ببینم:

 

namespace زیر:

namespace App\Exceptions;

داره به این پوشه اشاره میکنه:

- app
	- Exceptions

 

حالا اگه بخوایم از کلاس داخل اون دایرکتوری استفاده کنیم کافیه اسم کلاس رو هم موقع use کردن به نام namespace اضافه کنیم:

 

use App\Exceptions\Handler;

Handler در بالا نام کلاس است.

 

باز اگه سوالی بود بپرسید من در خدمتم، موفق باشید

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

21 اسفند 99

حذف شده
متوجه شدم ممنون منظورم اینه که autoloader ما از کجا متوجه میشه آدرس namespace ، همون آدرس فایله؟ مگه ما از بک اسلش (\) استفاده نکردیم؟
Danial Rahimi

21 اسفند 99

حذف شده
ما از نام گذاری namespace مشخص میکنیم که دقیقا داخل چه پوشه ای هستیم، syntax نام گذاری برای namespaceها اینطوریه که ما از \ استفاده کنیم، نکته اینجاست که ما داریم خود کلاس رو لود میکنیم و کاری به این پوشه بندیش نداریم، با تابع spl_autoload_register ما آدرس کامل کلاس رو داریم و لودش میکنیم. حالا میتونیم \ های namespace رو تبدیل به / کنیم تا شبیه به آدرس دهی پوشه ها بشه
امیر صالحی

22 اسفند 99

حذف شده
نام namespace ها باید دقیقا با نام پوشه ها یکی باشه
امیر صالحی

22 اسفند 99