42
تشکر

استاندارد PSR-2 در PHP

PHP – پی اچ پی

PHP – پی اچ پی

در ادامه آشنایی با استانداردهای PSR، در این مطلب میخواهیم با استاندارد PSR-2 آشنا شویم. این استاندارد به نوعی گسترش استاندارد PSR-1 است.

هدف اصلی این استاندارد این است که سردرگمی شما در زمانی که کدهای دیگران را میبینید کمتر شود، که اینکار با رعایت نکات و استایل های کدنویسی توسط تمام برنامه نویسان PHP قابل انجام است.

استفاده از این استانداردها در تمام پروژه های PHP چه متن باز یا تجاری توصیه می‌شود که باعث هماهنگی بیشتر بین برنامه نویسان خواهد شد.

عمومی

پایه استاندارد

استانداردهای PSR-1 باید رعایت شود.

فایل‌ها

تمام فایل‌های PHP باید از Unix LF برای ایجاد خط جدید یا شناسایی پایان خط استفاده کنند (سیستم عامل ویندوز از CR استفاده میکند).

تمام فایل‌های PHP باید دارای یک خط خالی در پایان فایل باشند.

علامت تگ پایان PHP یا باید در فایل‌هایی که تنها، حاوی کد PHP هستند حذف شوند.

خط‌ها

محدودیت شدیدی در طول خط نباید وجود داشته باشد.

محدودیت ملایم بر روی طول خط باید 120 کاراکتر باشد، که در صورتی که بیشتر از 120 کاراکتر شد برنامه باید هشدار بدهد، اما هیچ اجباری مبنی بر رعایت آن نباید وجود داشته باشد.

خط‌ها میتوانند بیشتر از 80 کاراکتر نباشند و خط‌های طولانی‌تر به چند خط تبدیل شوند.

هیچ کاراکتر فاصله‌ای نباید در انتهای خط‌های غیر خالی وجود داشته باشد.

فایل‌های PHP میتوانند دارای خط‌های خالی برای افزایش خوانایی داشته باشند.

در هر خط تنها باید یک statement وجود داشته باشد.

تورفتگی

فایل‌های PHP باید از 4 کاراکتر فاصله برای تورفتگی استفاده کنند. همچنین برای اینکار نباید از Tab استفاده شود.

کلمات کلیدی

کلمات کلیدی PHP باید به صورت حروف کوچک (Lower Case) استفاده شوند.

کلمات کلیدی (ثابت‌های) true, false و null باید به صورت حروف کوچک (Lower Case) استفاده شوند.

فضای نام (Namespace) و Use

زمانی که از namespace استفاده می‌شود باید یک خط خالی بعد از آن وجود داشته باشد.

تمام استفاده از کلمه کلیدی use باید بعد از namespace مورد استفاده قرار بگیرد.

هر use فقط باید برای یک کلاس مورد استفاده قرار بگیرد.

یک خط خالی بعد از استفاده از کلمات کلیدی use باید وجود داشته باشد.

مثال:

کلاس‌ها، خواص و متدها

لغت کلاس به class, trait و interface اشاره میکند.

Exteneds و Implements

کلمات کلیدی extends و implements باید در همان خطی که کلاس تعریف شده است، مورد استفاده قرار بگیرد.

بریسس (Braces) یا {} باید در خط‌های جداگانه تعریف شوند.

لیست implementهای کلاس میتواند به چند خط تقسیم شود. در این صورت در هر خط باید یک implement تعریف و در خط تعریف کلاس هیچ implementیی تعریف نشود، همچنین خط‌های تعریف implement باید یک تورفتگی داشته باشند.

این قانون در مورد extend از interfaceها نیز صحیح میباشد (این بخش در PSR-2 Meta آمده است).

خواص (Properties)

نوع میدان دید خواص باید همیشه تعریف شوند (مانند public, protected و private).

کلمه کلیدی var نباید در تعریف خواص مورد استفاده قرار بگیرد.

در هر خط باید یک property تعریف شود.

ابتدای propertyها نباید با _ شروع شود.

متدها (Methods)

نوع میدان دید متدها باید همیشه تعریف شوند (مانند public, protected و private).

ابتدای متدها نباید با _ شروع شود.

نام متدها باید با یک فاصله بعد از کلمه کلیدی function تعریف شوند.

بریسس (Braces) یا {} باید در خط‌های جداگانه تعریف شوند.

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

پارامترهای متد (Method Arguments)

در لیست پارامترهای متد باید یک فاصله قبل از پارامتر وجود داشته باشد و همچنین هیچ فاصله‌ای نباید بعد از پارامتر وجود داشته باشد.

پارامترهایی که دارای مقدار اولیه هستند باید در انتهای لیست تعریف شوند.

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

زمانی که لیست پارامترها به چند خط تقسیم میشود، پرانتز بسته کننده و بریس باز کننده باید با هم در یک خط تعریف شوند.

کلمات کلیدی abstract, final و static

کلمات کلیدی abstract و final باید قبل از کلمات کلیدی میدان دید استفاده شوند.

کلمه کلیدی static باید بعد از کلمات کلیدی میدان دید استفاده شوند.

فراخوانی متد و تابع

زمان فراخوانی تابع یا متد، هیچ فاصله‌ایی نباید بین نام تابع و پرانتز باز کننده وجود داشته باشد. همچنین هیچ فاصله‌ایی بعد از پرانتز باز کننده و قبل از پرانتز بسته کنند نباید باشد.

در لیست آرگومان‌های متد یا تابع باید یک فاصله قبل از آرگومان وجود داشته باشد و همچنین هیچ فاصله‌ای نباید بعد از آرگومان وجود داشته باشد.

لیست آرگومان‌های تابع یا متد میتواند به چند خط تقسیم شود. در این صورت در هر خط باید یک آرگومان تعریف و در خط فراخوانی تابع یا متد هیچ آرگومانی تعریف نشود، همچنین خط‌های تعریف آرگومان باید یک تورفتگی داشته باشند.

ساختارهای کنترلی

قوانین عمومی زیر برای تمام ساختارهای کنترلی میباشد.

  • یک فاصله باید بعد از کلمه کلیدی ساختار کنترلی وجود داشته باشد.
  • هیچ فاصله‌ایی نباید بعد از پرانتز باز کننده وجود داشته باشد.
  • هیچ فاصله‌ایی نباید قبل از پرانتز بسته کننده وجود داشته باشد.
  • یک فاصله باید بین پرانتز بسته کننده و بریس باز کننده وجود داشته باشد.
  • بدنه ساختار کنترلی باید یک بار تورفتگی داشته باشند.
  • بریس بسته کننده باید در خطی جداگانه وجود داشته باشد.

ساختار if, elseif و else

ساختار if باید به صورت زیر باشد. به جایگاه پرانتزها، فاصله ها و بریس‌ها توجه کنید. همچنین کلمات کلیدی else و elseif در همان خط بریس بسته کننده ساختار قبلی هستند.

کلمه کلیدی elseif باید به جای کلمه کلیدی else if استفاده شود.

ساختار switch و case

ساختار switch باید به صورت زیر باشد. به جایگاه پرانتزها، فاصله ها و بریس‌ها توجه کنید. کلمه کلیدی case باید یک تورفتگی از switch داشته باشند و کلمه کلیدی break باید با همان تورفتگی بدنه case نوشته شوند.

یک خط کامنت (مانند no break) در caseهایی که دارای break یا return نیستند باید وجود داشته باشد.

ساختار while و do while

ساختار while باید مشابه زیر باشد. به جایگاه پرانتزها، فاصله ها و بریس‌ها توجه کنید.

همچنین do while

ساختار for و foreach

ساختار for و foreach باید مشابه زیر باشد. به جایگاه پرانتزها، فاصله ها و بریس‌ها توجه کنید.

ساختار try و catch

ساختار try و catch باید مشابه زیر باشد. به جایگاه پرانتزها، فاصله ها و بریس‌ها توجه کنید.

Closures

در closureها باید یک فاصله بعد از کلمه کلیدی function و یک فاصله قبل و بعد از کلمه کلیدی use وجود داشته باشد.

بریس باز کننده باید در همان خط تعریف closure باشد و بریس بسته کننده آن باید در خطی جداگانه باشد.

هیچ فاصله‌ایی بعد از پرانتز باز کننده و قبل از پرانتز بسته کنند نباید باشد.

در لیست آرگومان‌ها و متغیرهای closure باید یک فاصله قبل از آرگومان و متغیر وجود داشته باشد و همچنین هیچ فاصله‌ای نباید بعد از آرگومان و متغیر وجود داشته باشد.

آرگومان‌های اختیاری باید در انتهای closure تعریف شوند.

ساختار closure باید مشابه زیر باشد. به جایگاه پرانتزها، فاصله ها و بریس‌ها توجه کنید.

لیست آرگومان‌ها و متغیرها میتواند به چند خط تقسیم شود. در این صورت در هر خط باید یک آرگومان یا متغیر تعریف و در خط تعریف closure هیچ آرگومانی تعریف نشود، همچنین خط‌های تعریف آرگومان و متغیر باید یک تورفتگی داشته باشند.

زمانی که لیست آرگومان‌ها و متغیرها به چند خط تقسیم میشود، پرانتز بسته کننده و بریس باز کننده باید با هم در یک خط تعریف شوند.

فرمت‌های بالا باید در زمانی که closure در‌ واقع یک آرگومان متد یا تابع است نیز رعایت شوند.

همچنین ساختار زیر در استاندارد PSR-2 کاملاً درست است (این بخش در PSR-2 Meta آمده است).

نتیجه‌گیری

ساختارها و عناصر بیشتری نیز وجود دارند که در این استاندارد به آن‌ها اشاره‌ایی نشده که شامل زیر است ولی محدود به آن نیست.

  • تعریف متغیرها و ثابت های سراسری
  • تعریف توابع
  • عملوندها و انتساب‌ها
  • کامنت‌ها و بلاک‌های اسناد
  • پیشوند و پسوندهای کلاس
  • بهترین شیو‌ه‌ها
این مطلب از سری مطالب، استانداردهای PSR است
  • mahdirabbani می‌گه:

    ممنون از مطالب خیلی مفیدتون. لطفا هرچه زودتر ادامه اش رو بذارید.

  • سلام به منم سر بزنید tarhche.ir مرسییییییی

  • حسین می‌گه:

    سلام ببخشید که به مطلب ربطی نداره
    میشه یکم در مورد این پروژه تئضیح بدید و کاربدو بگید
    https://www.polymer-project.org

  • علی می‌گه:

    سلام
    اگر بخوایم یه سایت با امکانات اختصاصی (مثلا:تعیین سطح کاربری برای افراد،مدیریت مطالب ارسالی،نظرسنجی،پرداخت آنلاین،وضعیت ارسال کالا و …) درست کنیم،باید از وردپرس و جوملا و … استفاده کنیم یا یک سیستم مدیریت محتوای اختصاصی درست کنیم؟کدوم بهتره؟
    چه زبان هایی لازمه ؟ CMS واسه طراحی و ساخت یک
    کافیه؟ PHP,HTML,CSS,Jquery,AngularJS زبان های
    مثلا برای طراحی یک فروشگاه اینترنتی میشه از وردپرس و … استفاده کرد یا باید یچیزی مثل
    http://aram.profishop.ir/cpanel
    طراحی کنیم؟کدوم یکی بهترین روش حساب میشه(از هر نظر)؟
    یا برای یک رستوران که امکان رزرو میز و استخدام نیرو و… داره؟
    ببخشید یذره طولانی شد
    خواهشا جواب بدید،خیلی سوال مهمیه واسم
    با تشکر

    • امیر حسینی می‌گه:

      دوست عزیز اگه php بلد باشی میتونی کارای طراحی پنل رو انجام بدی(منظور قالب نیست) jquery برای افزایش کارایی به کار میره اما اگه نباشه میشه کار رو انجام داد

      مهم ترین چیز تسلط به کدنویسی با php و ارتباط با database

  • محمد کیانی می‌گه:

    آیا ادیتوری هست که این استاندارد رو رعایت کنه؟ یا یه گزینه ای داشته باشه که این استاندارد رو بشه روی یک فایل اعمال کرد؟

  • علی می‌گه:

    سلام دو تا سوال دارم خواهشا سریع جواب بدید
    با PHP میشه یه پنل مدیریت برای یه سایت ساخت؟
    کلا ساخت یه پنل مدیریت به چه زبان هایی نیاز داره؟
    یچیزی مثل این :http://aram.profishop.ir/cpanel
    من زبان های html,css,jquery,css,php,angularjs رو بلدم و 17 سالمه.از کجا و با چه سایتی شروع کنم؟خواهشا کمکم کنید.این سوالا خیلی درگیرم کرده.اصلا من با این زبان هایی که بلدم و یه سری کار های گرافیکی (در حد یه طراح وب) میتونم درآمد داشته باشم؟چجوری؟
    مرسی مرسی

  • مهرداد می‌گه:

    سلام
    من چندین بار سرچ در مورد مطالب تخصصی برنامه نویسی با موضوعات مختلف انجام دادم و هر دفعه تو سایت شما پستهای مرتبط پیدا کردم که ارزش خوندن داشت. هر بار از گوگل اومدم اینجا و اینبار دیگه روم نشد چیزی نگم و برم.
    خسته نباشی و دمت گرم دوست عزیز

  • وحید می‌گه:

    آقای شفیعی باز هم مطلب بنویس علی الخصوص در مورد لاراول
    ممنون

  • آروین می‌گه:

    سلام آقای شفیعی خیلی مطلب جالب بود!

    واقعا ینی یه کد تمیز نوشتن اینقد داستان دارههههه…


  • نظرات این مطلب بسته است.