این مقاله در ادامه مقاله‌های قبلی در مورد درست برنامه نویسی کردن می‌باشد. در این مقاله می‌خواهیم در مورد PSR-2 بحث کنیم و این بحث در ادامه PSR-1 می‌باشد. (حتما اون رو هم یه نگاه بندازید)

قبل از هر چیز باید بگم که این قوانین برای این نیست که کسی سود کنه، برای این هستش که کدها خوانا تر باشند و دیگران راحت تر از کد های شما سر در بیارن. (خلاصه چیزی تو جیب من یا اون سایته نمیره ;) ولی مطمئنن خیلی چیزها تو جیب شما میره)

لیست استاندارد ها:

  • کدهای این استاندارد باید استاندارد قبلی PSR-1 رو رعایت کرده باشن(مثلا ‍شتری نوشتن یا Study Case‍ و نحوه نوشتن توابع و constant ها و ...

  • کدهای داخل یک فاکنشن باید با چهار اسپیس جلو تر بیان و تب زده نشود. (اگر از Php Storm استفاده میکنید نگران نباشید)

  • حتما نباید کد هاتون کمتر از ۱۲۰ کاراکتر باشه ولی سعی کنید این کار رو انجام بدید و به طور معمول سعی کنید طول یه خط کمتر از ۸۰ کاراکتر باشه. (اگه از Php Storm استفاده می‌کنید با زدن شورت کی روبرو خودش این کار رو انجام میده CTRL+ALT+L مثلا من این جا چند تا مثال میزنم که متوجه بشید. فرض کنید تابعی داریم مثل ذیل

    /**
     * @param Request $request
     * @param array $params
     * @param String $countryKey
     * @param String $provinceKey
     * @param String $cityKey
     * @param Closure $closure
     * @return mixed
     */
    public function testFunc(Request $request, Array $params, String $countryKey, String $provinceKey, String $cityKey, Closure $closure)
    {
        $result = [$params[$countryKey], $params[$provinceKey], $params[$cityKey]];
        $request->attributes["location_params"] = $result;
        return $closure($request);
    }

    فارغ از اینکه ورودی های این تابع زیاد هستند و باید طولش کمتر از این حرف ها باشه باید درست نگارش بشه برای نگارش صحیح اون باید بعد از پرانتز فانکشن اینتر بزنیم و اونها رو به ردیف کنیم یعنی مثل ذیل

    /**
     * @param Request $request
     * @param array $params
     * @param String $countryKey
     * @param String $provinceKey
     * @param String $cityKey
     * @param Closure $closure
     * @return mixed
     */
    public function testFunc(
        Request $request, 
        Array $params, 
        String $countryKey, 
        String $provinceKey, 
        String $cityKey, 
        Closure $closure)
    {
        $result = [$params[$countryKey], $params[$provinceKey], $params[$cityKey]];
        $request->attributes["location_params"] = $result;
        return $closure($request);
    }

    اینطوری وقتی کسی کد ما رو میخونه نمیخواد هی چپ و راست کنه اسکرول رو

  • قبل و بعد از namespace حتما باید یک خط فاصله وجود داشته باشد.

  • براکت بعد از فانکشن باید در یک خطر مجزا و همینطور در انها باید در یک خط مجزا باشید.

    /**
     * Display a listing of the resource.
     *
     * @param Request $request
     * @return Response
     */
    public function index(Request $request)
    {
        .
        .
        .
    }
  • Visibility برای تمام متغیر ها و تمام متد ها بایستی مشخص شود. اول از همه باید بگم که Visibility یعنی چی :) Visibility به عبارتی میگویند که پشت متغیر ها و یا متد ها قرار می‌دهیم تا سطح دسترسی به انها مشخص شود که آنها عبارتند از Public,Private,Protected که اگر یک متغیر محلی باشد یعنی اینکه از بیرون به آن دسترسی ای نیست اگر عمومی باشد از بیرون می‌توان به آن دسترسی داشت و تغییر داد و اگر حفاظت شده باشد می‌توان از بیرون به آن دسترسی داشت ولی نمی‌توان آن را تغییر داد. حالا ما اگر بخواهیم تابعی و یا متغیری رو تعریف میکنیم حتما باید قبلش مشخص کنیم که میزان دسترسی به اون چقدر هستش. در ذیل چند تا مثال آورده شده که بیشتر با این موضوع اشنا بشید.

    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';
    
    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */
    public function create()
    {
        //
    }

    چیزی که باید به اون هم پرداخت اینه که abstract و final باید قبل از visibility بیان و واژه static باید بعد از visibility بیاد. از اونجایی که میدونم زیاد استفاده نمیکنید آخر گفتم ;)

ولی دوستان خواهش من اینه که به خودتون و کدی که میزنید احترام بگذارید و بعد از اون به فکر همکارانتون و یا انسانهایی که بعدا میان و دسته گل شما رو (ببخشید کد شما رو) میخونن، باشید.

  • دستورات کنترلی مثل if یا while باید با قسمت شرط یک فاصله داشته باشد. متد ها و فراخانی فانکشن ها بدون فاصله باید باشد.
    if (true) {
        ...
    }
  • برای دستورات کنترلی براکت شروع در همان خط و براکت پایان نیز بعد از متن آن در یک خط دیگر بایستی باشد. (مشابه مثال بالا)
  • داخل پرانتز دستورات کنترلی (مثل if بالا) هیچ فاصله ای قبل و بعد از پرانتز نباید باشد. (مشابه مثال بالا)

در انتها باید تشکر کنم از دوستانی که زحمت می‌کشند و کدهای خوانا می‌نویسند و ازتون خواهش کنم که از PHP DOC در تمامی متد ها استفاده کنید.