همه چیز در مورد PSR (بخش دوم)

در پست قبلی با PSR آشنا شدیم و فهمیدیم چی هستش و قراره برامون چیکار کنه. همچنین با PSR-1 هم آشنا شدیم. حالا در ادامه با PSR-3 و PSR-4 آشنا می‌شیم.قبل از شروع باید به این نکته هم اشاره کنم که دلیل توضیح ندادن PSR-2، منسوخ شدن اون هستش.PSR-3: Logger Interfaceاگر بخوام خیلی ساده این استاندارد رو توضیح بدم باید بگم این استاندارد برای سیستم‌های لاگینگ هستش تا به صورت سراسری بتونیم از اونها داخل تمام پروژه‌هامون استفاده کنیم. (توضیح کامل این PSR داخل این پست نمی‌گنجه و اینجا فقط در حدی که باهاش آشنا بشیم در موردش می‌نویسم اما در آینده یه پست با مثال‌های خوب در مورد این PSR خواهیم داشت)حالا بریم ببینیم باید چیکار کنیم... قدم اول برای استفاده از این استاندارد، استفاده از پکیج psr/log هستش. این پکیج تمام اینترفیس‌ها، کلاس‌ها و تریت‌هایی که برای پیاده‌سازی و استفاده از این استاندارد نیاز داریم رو در خودش داره.اولین چیزی که نیاز داریم در مورد محتویات این پکیج بدونیم، اینترفیس LoggerInterface هستش.این اینترفیس ۸ متد رو در اختیار ما قرار میده که به وسیله‌ی اونها می‌تونیم لاگ‌هامون رو توی ۸ لول زیر ایجاد کنیم:EmergencyAlertCriticalErrorWarningNoticeInfoDebugهمچنین یه متد دیگه هم بهمون میده به اسم log که ورودی اول این متد، یکی از لول‌های بالا هستش.تمام متد‌های بالا باید یه ورودی message داشته باشن که رشته قبول کنه. (همچنین میتونه آبجکت‌هایی که متد ()toString__ دارن هم قبول کنه)علاوه بر message، متدها یه ورودی context هم نیاز دارند که آرایه قبول میکنه. این ورودی به منظور نگهداری اطلاعات اضافی که قابلیت تبدیل شدن به رشته رو ندارند استفاده میشه.این رو باید بدونیم که اگر خواستیم یه سری اکسپشن به عنوان context به لاگر بفرستیم حتما باید داخل کلید exception قرارشون بدیم.حالا وقتی بخوایم داخل یکی از کلاس‌هامون عملیات لاگ کردن رو انجام بدیم فقط کافیه یه ورودی از نوع LoggerInterface رو به کلاسمون تزریق کنیم و بعد به راحتی از متد‌هایی که در اختیارمون قرار می‌ده استفاده کنیم. اینجوری می‌تونیم مطمین باشیم که همیشه لاگری که توسط استاندارد PSR-3 ایجاد شده به کلاسمون تزریق میشه و کلاسمون میتونه همه‌جا بدون مشکل کار کنه.در آینده داخل یه پست فقط و فقط در مورد این PSR صحبت می‌کنیم و یه لاگر هم با استفاده از این استاندارد می‌سازیم.PSR-4: Autoloaderاین استاندارد یکی از استاندارد‌های مهم و پر کاربرد هستش و همونطور که از اسمش پیداست در مورد لود خودکار کلاس‌ها هستش.اگه نمی‌دونید لود خودکار یا همون Autoloading چی هستش میتونید از این مطلب استفاده کنید.و حالا بریم سراغ لیست مواردی که باید در مورد PSR-4 بدونیم.منظورمون از کلاس در این مطلب، کلاس‌ها، اینترفیس‌ها، تریت‌ها و هر ساختار اینچنینی هستش.نام‌گذاری کلاس‌ها در این استاندارد باید به شکل زیر باشد.\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName> ۳. کدی که عملیات اتولود رو انجام میده نباید هیچ اروری بده (اکسپشن بده) و همچنین نباید هیچ مقداری رو برگردونه.مورد دوم یه سری نکته داره که اونها رو اینجا می‌نویسم.(نمیدونم چجوری میشه توی ویرگول لیست تو در تو درست کرد برای همین آوردمشون اینجا وگرنه باید بره زیر همون مورد دوم :) )هر نیم‌اسپیسی باید شامل یک top level namespace باشه که بهش vendor namespace هم میگن.هر نیم‌اسپیسی میتونه شامل یک یا چند sub-namespace باشه. (همون قسمت وسطیه)نیم‌اسپیس باید با نام کلاسمون تموم بشه.آندرلاین هیچ معنی خاصی توی نیم‌اسپیس نمیده.(برخلاف PSR-0)ما‌ می‌تونیم از حروف کوچک و بزرگ در نیم‌اسپیس‌ها استفاده کنیم.برای ارجاع نیم‌اسپیس‌ها به کلاس باید به حروف بزرگ و کوچک حساس باشیم.خب دوستان در این مطلب با استانداردهای PSR-3 و PSR-4 آشنا شدیم. هر دوی این استانداردها نکته‌های بیشتری دارند که ایشالا در آینده به صورت مفصل در پستی جداگانه بهشون می‌پردازیم.