استاندارد برنامه نویسی کنیم (مقدمه)
استاندارد برنامه نویسی کنیم (مقدمه)
توی این مقاله میخوام درباره اولین تجربه خودم در حوزه برنامه نویسی php که روی یک پروژه بزرگ کار میکردم باهاتون صحبت کنم.
اولین روزهایی که ما دوستان برنامه نویس با هم برنامه نویسی رو شروع کردیم خیلی مهم نبود که استاندارد های برنامه نویسی رو رعایت کنیم اما بعد از گذشت ۶ ماه این موضوع کم کم جدی شد. طوری که برای تغییر دادن یک بخش کوچک که به نظر میرسید کار یک روز باشه ما مجبور بودیم که چند روز و بعضی وقتها چند هفته وقت بگذاریم تا بتونیم اون کار رو انجام بدیم. لذا برنامهای جدی گذاشتیم تا در اولین فرصت کد های خودمون رو ریفکتور کنیم تا هم همکارانمون بتونن متوجه کدهایی که ما زدن بشن و برعکس و هم اینکه با تغییر دادن یک بخش، بخش دیگری کرش نکنه.

پس از اینکه جستجوی لازم رو برای استاندارد های موجود انجام دادیم که در ادامه میخواهم به یک به یک این استاندارد ها بپردازم.
خب اولین چیزی که متوجه شدیم این بود که باید اول کد زدنمون رو درست کنیم. این یعنی اینکه اسم کلاسها، سیمبول ها، پراپرتی ها، توابع و … رو باید درست بنویسیم. پس گشتیم و گشیتم تا به سایت https://www.php-fig.org برخورد کردیم.
استاندارد برنامه نویسی کنیم (مقدمه)
در این سایت در بخش PSR استاندارد هایی رو که مورد تأیید قرار گرفته شده رو برای عموم گذاشتن تا همه بتونن از تجربیات افراد متخصص استفاده کنن و یکدست کد بزنن.
وقتی وارد تب PSRs بشید میبینید که تاکنون ۱۱ استاندارد Accept شده و همچنین مقاله های بیشتری در حال بررسی هستند تا Acceptشوند و جزء استاندارد ها قرار بگیرند.همچنین مواردی هستند که رها شدهاند ABANDONED و همچنین موردی هست که دیگه استفاده نمیشه DEPRECATED چون که جای اون یه پکیج جدید وجود داره.
در ادامه موارد ۱ تا ۷ ام رو به طور اختصار توضیح میدم.(البته مواردی که Accept هستند;
Basic Coding Standard:PSR-1Coding Style Guide:PSR-2Logger Interface:PSR-3Improved Autoloading:PSR-4Caching Interface:PSR-6HTTP Message Interfaces:PSR-7
استاندارد PSR-1
استاندارد برنامه نویسی کنیم (مقدمه)
به طور خلاصه باید بگم در این استاندارد به نحوه پیادهسازی کد ها در فایلها پرداخته شد و نام گذاری کلاسها و توابع و … پرداخته شد. که به صورت تیتروار موارد ذیل هستش
- فایلها مجازند تنها تگ
<?phpو<?=رو داشته باشند. - برای کد نویسی باید از
UTF-8 without BOMاستفاده شود. - فایلها یا باید برای تعریف سیمبول ها(کلاس ها و متدها و …) باشند یا برای
side-effectها (مثلاً فایلهای تنظیمات مثلsetting - نام محیط
namespaceفایلها باید از یکی از استاندارد هایPSR-0(منسوخ شده) یاPSR-4تبعیت کنند. برای اینکه به صورت اوتوماتیک در فایلphpلود شوند. لازم به ذکره کهnamespaceهمون چیزی هستش که در بالای فایلها مینویستم که نشون بدیم این فایل مربوط به چه کسی و چه پکیجی هستش و در چ آدرسی قرار گرفته تا سیستم کامپوزر متوجه بشه و اونو اتوماتیک در پروژهrequireکنه. - نام کلاسها باید به صورت
StudlyCapsنوشته بشوند. مثلاً اینجوریTestClass. - تمامی
constantsهای یک کلاس باید به صورت حروف بزرگ و با خط فاصلهunderscoreجدا شوند. مثلاًDEFAULT_VALUE - همگی متد ها باید به صورت شتری
camelCaseنوشته بشوند. مثلاًtestFunction - نکته مهم اینه که برای متغیر ها هیچ خط مشی ای مشخص نشده لذا هر طور که خواستید بنویسید که البته من همیشه به صورت
camelCaseمینویسم ولی شما میتونید از روش خودتون استفاده کنید. ولی نکته بسیار بسیار مهم آینه که همه جا از یک روش استفاده کنید نه اینکه یه جاcamelCaseو یه جای دیگهunder_scoreو یه جای دیگهStudyCapبنویسید.
استاندارد PSR-2
استاندارد برنامه نویسی کنیم (مقدمه)
این استاندارد در ادامه استاندارد قبلی است. و مواردی که در این استاندارد رعایت شود به صورت تیتر وار به قرار ذیل است:
- باید استاندارد
PSR-1رعایت شود. - برای
indentationباید ۴ اسپس زده شود.Indextionهمان فاصله هایی است که کدهای زیر یک تابع یا حلقه نسبت به خط بالاسری دارد. - هیچ محدودیت
hard limitای برای طول خط ها وجود ندارد. اماsoft limitبرای هر خط ۱۲۰ کاراکتر هستش. یعنی طول خطوط اگر بیشتر از ۱۲۰ تا شد باید اینتر بزنید و در خط پایینی ادامش بدید. - تنها یک خط خالی بعد از
namespaceویک خط خالی بعد ازuseها باید باشد. curly bracketبعد از کلاس و متد باید در یک خط باشد و در پایان هم همینطور.- برای تمام متد ها و پراپرتی ها باید
Visibilityمشخص شود. یعنی مثلاً مشخص شود کهpublicهستش یاprivateیا برای پراپرتی ها (متغیر های داخل کلاس که عمومی هستن)protected, abstractو … - کنترل استراکچر ها یا همان
Ifوswitch caseو … - باید بین شرط ها بعد از ویرگول یک اسپس زده شود.
- پرانتز شرط ها بدون فاصله به آنها میچسبد.
curly bracketبازشونده در همان خط وcurly bracketبسته شونده یک خط پایینتر از متن و در یک خط نوشته شود. - متنی که در هر شرط نوشته میشود باید بدون هیچ فاصلهای نسبت به خط بالایی نوشته شود.
استاندارد برنامه نویسی کنیم (مقدمه)
چون در این بخش صرفاً میخوام همه چیز رو معرفی کنم در اینجا فقط توضیح مختصری داده شده که در مقالههای بعدی کاملاً با نمونه کد تشریح خواهم کرد.
استاندارد PSR-3
نکتهای که باید اینجا بگم اینه که Interface در عنوان هر استاندارد به معنی مجموعه کدی در قالب یک پکیج است که به پروژه اضافه میشه و اون رو یکدست میکنه. به صورت خلاصه میتوان گفت که برای مرتب کردن نحوه لاگ کردن هستش که در قالب ۸ متد:
debuginfonoticewarningerrorcriticalalertemergency
استاندارد برنامه نویسی کنیم (مقدمه)
مطرح شده است. با این روش لاگ گرفتن ها و یا ثبت اطلاعات در فایل لاگ پروژه مرتب خواهد شد و از قانون استانداردی تبعیت خواهد کرد.
استاندارد PSR-4
همون چیزی هستش که به خاطر اون در پروژه هامون از Composer استفاده میکنیم. اگه بخواهیم بدون استفاده از composer یک پروژه را درست کنیم در فایل index.php باید چند صد بار از require_once استفاده کنیم. اما با این روش فایلها به صورت اوتوماتیک در پروژه لود میشوند و فقط کافی است که قبل از کلاسی که میخواهیم از آن استفاده کنیم اونها رو با namespace مربوطه use کنیم. مثال کامل و دقیق تر این استاندارد رو در یک مقاله کاملاً جدا خواهم نوشت تا دوستان به عمق composer پی ببرند چون خودم هم مدتها نمیدونستم دقیقاً کار کامپوزر چی هستش.
استاندارد PSR-6
همون طور که از عنوان این استاندار پیداست این پیکیجی برای یک دست شدن دیتا ها در سیستم Cache میباشد. در این پکیج برنامه نویسان میتوانند به صورت یکپارچه از سامانه Cache استفاده کنند که در آن با استفاده از کلید و زمان انقضا متغیر مورد نظر خودشون بر روی هارد دیسک و یا رم ذخیره کنند.
استاندارد PSR-7
در این پکیج نیز استانداردی برای بیان کردن پیغام های HTTP معرفی شد. تا قبل از این استاندارد با استفاده از متغیر هایی نظیر _SERVER و یا _GET پارامتر های ورودی ریکوئست را دریافت کرد. این پکیج شامل دو اینترفیس RequestInterface و ResponseInterface که به ترتیب برای دریافت پارامتر ها و برای ارسال پارامتر ها با استفاده از پروتکل HTTP Message میباشد.
استاندارد برنامه نویسی کنیم (مقدمه)

