کدنویسی استاندارد با PSR (قسمت1)


شاید تاکنون نام PSR را شنیده باشید، PSR مخفف عبارت PHP Standard Recommendation (استانداردهای پیشنهادی PHP) است.
تا پیش از PSR استاندارد واحدی برای نوشتن کدهای PHP وجود نداشت، و هر توسعه دهنده ای بنابر سلیقه و تجربه شخصی و یا استانداردهای معرفی شده توسط شرکت های دیگر نظیر Zend Framework به شکل های پراکنده ای کد می‌نوشتند.

سال 2009 گروهی از توسعه دهندگان به نمایندگی از پروژه های محبوب PHP دور هم گردآمدند تا گروهی به نام Framework Interoperability Group یا به اختصار FIG را تشکیل دهند تا یک اصول مشترک برای جامعه توسعه دهندگان PHP ایجاد کنند. استانداردهای مورد توافق و تایید این گروه در وبسایت رسمی آنها به نشانی php-fig.org قابل دسترس است. اگر توسعه دهنده PHP هستید دانستن این قواعد از ضروریات توسعه یک پروژه استاندارد و اصولی است و باید به عنوان یک PHP Developer آن ها رابدانید.

تا لحظه نگارش این مقاله 19 استاندارد توسط گروه FIG تعیین شده که از 0 تا 18 نامگذاری شده است، در بخش اول این مقاله به 3 استاندارد PSR-1, PSR-2, PSR-3 می‌پردازیم.

استاندارد PSR-0 که مربوط به autoloading است منسوخ شده و قواعد جدید آن در PSR-4 بروزرسانی شده است بنابراین از این بخش عبور خواهیم کرد.

1- استانداردهای پایه کدنویسی: PSR-1

اولین استاندارد رعایت اصول اولیه و ابتدایی نحوه نوشتن کدهاست که به طور مختصر به شرح زیر است:

  • فایل‌ها باید با تگ‌های  =?>  یا php?> شروع شوند.
  • فایل‌ها باید از نوع UTF-8 و بدون BOM باشند.
  • فایل‌ها یا باید معرف سیمبول‌ها باشند (کلاس، متغیر، فانکشن و..) یا از نوع side-effect (چاپ اطلاعات، اعمال تنظیمات ini و…) باشند و نباید همزمان هردو کار را انجام دهند.
  • کلاس‌ها و namespace ها باید از استاندارد autoloading که در PSR-4 مشخص شده پیروی کنند.
  • نام گذاری کلاس‌ها باید به شکل StudlyCaps باشند.
  • ثابت‌ها باید به شکل uppercase و با خط آندرلاین (CONST_VAR) از هم جداشوند.
  • متدها باید به شکل camelCase نام گذاری شوند.

2- استایل و ظاهر کدنویسی: PSR-2

این استاندارد به نحوه نوشتن کد از لحاظ استایل و ظاهر می‌پردازد، در صورتیکه از محیط های کدنویسی نظیر Intellij Idea استفاده کنید اغلب این استانداردها به صورت خودکار اعمال می‌شوند.

  • برای تورفتگی کدها از 4 اسپیس استفاده کنید و از تب استفاده نکنید!
  • برای طول کد نوشته شده نباید محدودیتی الزام آور لحاظ شود! حد نرمال برای طول کد 120 کاراکتر و حد پیشنهادی 80 کاراکتر و یا کمتر است.
  • باید بعد از دستور namespace و use یک خط خالی باشد.
  • آکولاد یا براکت کلاس، در خط جدید و بعد از اعلان آن باز شود و در پایان بعد از بدنه کلاس در خط بعدی بسته شود.

مواردی ظاهری از این دست به طور مفصل در این لینک توضیح داده شده است که می‌توانید مشاهده کنید.

3- رابط لاگر(Logger Interface): PSR-3

لاگ کردن یکی از فراگیرترین کارهایی است که در PHP با آن مواجه هستیم. ما از لاگ‌ها برای ردیابی خطا، ثبت رویدادهای مهم و اشکال‌زدایی مشکلات کدمان استفاده می‌کنیم. حتی اگر فریمورک و CMS توسعه می‌دهید که سیستم لاگ اختصاصی دارد توصیه می‌شود با این استاندارد سازگار باشد.

پایه و اساس این استاندارد، پیاده سازی Logger interface است. این اینترفیس 8 متد دارد که هر کدام یک سطح از حساسیت خطا و پیام را گزارش می‌دهد همچنین متد log که به صورت عمومی برای هر نوع گزارشی قابل استفاده است.

هشت سطح گزارش به شکل زیر است:

  • سیستم غیر قابل استفاده است: Emergency
  • اقدام فوری لازم است: Alert
  • خطای بحرانی: Critical
  • خطاهایی که نیاز به توجه فوری ندارند اما باید تحت نظر قرار گیرند: Error
  • رخدادهای غیرمعمول یا نامطلوب که خطا نیستند: Warning
  • رویدادهای عادی اما مهم: Notice
  • رویدادهای جهت اطلاع رسانی: Info
  • برای اهداف اشکال زدایی: Debug

برای شروع استفاده از آن کافی است از طریق composer و یا گیت هاب به نشانی Psr/Log GitHub اقدام به نصب این لایبرری کنید.

امیدوارم تا اینجا یک دید نسبی به این قواعد پیدا کرده باشید اما برای تسلط کامل مطالعه سایت رسمی PSR به نشانی php-psr.org ضروری است، در مقالات بعدی به سایر PSRها می‌پردازیم.