رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چگونه کدهای PHP استاندارد بنویسیم
#1
سلام

اگر به کدهای خودتون نگاه کنید یا اگر کدهای پروژه های بزرگ و مشارکتی رو دیده باشید، متوجه تفاوت بسیار زیاد سبک کد نویسی بین این دو خواهید شد!
خوب دلیل چیه؟
دلایل زیادی می تونه داشته باشه، از تجربه و سلیقه برنامه نویس گرفته تا پایبند نبودن به یک سری قوانین خیلی ساده اما بسیار کاربردی!
محتوای این تاپیک شامل استانداردهای کدنویسی PHP خواهد بود که به مرور زمان و با مشارکت توسعه دهنده های پروژه های بزرگ پایه ریزی شده و به یک استاندارد تبدیل شده معروف به php-fig.
این قوانین بسیار پرکاربرد و مفید هستند، البته برای کدهایی که خودتون می نویسید و استفاده می کنید، هیچ اجباری به این کار نیست! ولی اون کدها فقط برای خودتون خوانا خواهد بود! :)
مطالب این تاپیک بیشتر ترجمه غیر رسمی قوانین php-fig و البته تجربه های شخصی هست.
امیدوارم مفید باشه.

بخش ها
1- قوانین پایه مرتبط با سبک کدنویسی (PSR-1)
پاسخ
تشکر شده توسط: sm_pakdel , php , meysam1366 , sorkhabi
#2
فعلاً توی تگ php جداگانه بگذارین. ادیتور MyBB چیزی برای Inline LTR نداره.
پاسخ
تشکر شده توسط: sm_pakdel , meysam1366 , sorkhabi
#3
طبق توضیحی که آقا رضا تو پیام خصوصی برام نوشتن، کدهای ltr و rtl رو اضافه کردم. الان میتونید برای متن چپ به راست درون خطی، بصورت زیر کار کنید:
کد:
[ltr]$this->field[/ltr]
و برای متن راست به چپ درون خطی هم بجای ltr ها از rtl استفاده کنید. به زودی دکمه مربوطه رو هم به ادیتور اضافه میکنم که کارتون راحتتر بشه.

با تشکر از آقا رضا
پاسخ
تشکر شده توسط: meysam1366 , abdollah110110 , rezakho , sorkhabi
#4
خوب
قسمت اول مربوط به استاندارد PSR-1 هست

1- قوانین کلی
  • تنها تگ های <?php , <?= در php مجاز هستند
  • فایل های php می بایست با UTF-8 بدون کاراکتر BOM ذخیره شوند
  • بهتره فایل یا حاوی عناصر (کلاس، تابع، ثابت و ...) و یا حاوی عبارت های دارای اثرات جانبی (چاپ خروجی، تغییر تنظیمات pnp.ini و ...) باشند و نه هر دو!
  • فضای نام ها و کلاس ها باید از قوانین تعریف شده برای autoloading تبعیت کنند (از قوانین PSR-0 و PSR-4)
  • نام کلاس ها باید به صورت StudlyCaps تعریف بشه
  • ثابت های درون کلاس باید تماما با حروف بزرگ با جداکننده "_" (underscore) تعریف بشند
  • نام متدها باید به صورت camelCase تعریف بشه


2- فایل های PHP

- تگهای Php
در کدهای php فقط باید از تگ بلند (<?php ?>) و تگ کوتاه چاپ (<?= ?>) استفاده بشه و استفاده از سایر تگ ها ممنوعه!

- انکودینگ
فایل های php می بایست با UTF-8 بدون کاراکتر BOM ذخیره شوند، این BOM یک کاراکتر هست که در برخی نمونه های UTF-8 ابتدای فایل ذخیره میشه و این همون کاراکتر معروف هست که وقتی فایل رو با dreamviewer ذخیره می کردیم، گاهی اوقات برای اجرا با خطا مواجه میشد.

- اثرات جانبی
یک فایل php یا باید محل تعریف توابع و کلاس و ... باشه و هیچگونه اثر جانبی مثل تولید خروجی و دستکاری تنظیمات php.ini و کانفیگ و ...نداشته باشه و یا باید فقط حاوی کارهای دارای اثرات جانبی باشه و نه هر دو!

عبارت "اثرات جانبی" شامل تولید خروجی، استفاده صریح از include و require، اتصال به سرویس های خارجی، تغییر در php.ini، مدیریت خطاها و استثناها، تغییر متغیر و ثابت های سراسری، خواندن و نوشتن فایل و موارد مشابه هست.

مثال زیر یک نمونه از تعریف عناصر همراه با اثرات جانبی هست، چیزی که شما باید ازش اجتناب کنید!


// side effect: change ini settings
ini_set('error_reporting', E_ALL);

// side effect: loads a file
include "file.php";

// side effect: generates output
echo "<html>n";

// declaration
function foo()
{
    // function body
}


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

<?php
// declaration
function foo()
{
    // function body
}

// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}


3- نامگذاری فضای نام و کلاس

فضای نام ها و کلاس ها باید از قوانین تعریف شده برای autoloading تبعیت کنند (از قوانین PSR-0 و PSR-4)، بدین معنی که هر کلاس باید به تنهای در یک فایل تعریف بشه و شامل فضای نام با دستکم یک سطح باشه. همچنین فضای نام ریشه همون نام vendor هست.

نام کلاس ها باید از StudlyCaps تبعیت کنه.

کدهای نوشته شده با php نسخه 5.3 و بالاتر باید از فضای نام رسمی استفاده کنند، مثل کد زیر:

<?php

// PHP 5.3 and later:
namespace VendorModel;

class Foo
{
}

و کلاس های نوشته شده در نسخه های 5.2 و پایین تر بهتره از روش pseudo-namespacing با پیشوند vendor_ در نام کلاس استفاده کنند، مثل:

<?php

// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}


4- متدها، مشخصه ها و ثابت های کلاس

این قوانین مربوط به همه کلاس ها، اینترفیس ها و تریت ها میشه

- ثابت ها
ثابت های درون کلاس باید تماما با حروف بزرگ با جداکننده "_" (underscore) تعریف بشند، مانند:

<?php

namespace VendorModel;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

- مشخصه ها (properties)
در این سند، به جد از هرگونه پیشنهاد برای روش نامگذاری مشخصه ها مثل $StudlyCaps یا $camelCaps و یا $under_score اجتناب شده، هرچند پیشنهاد میشه از یک روش در محدوده مشخص استفاده بشه. منظور از محدوده مشخص، محدوده vendor، پکیج، کلاس یا متد هست.

- متدها
نام متدها باید به صورت camelCase تعریف بشه


پ ن:
- قوانین PSR-0 و PSR-4 مربوط به نوشتن autoloading هستند که بعدا توضیح داده میشند.

- StudlyCaps یک روش برای نامگذاری شناسه ها هست، که اصل اساسیش بزرگ بودن کاراکتر اول همه کلمات هست، مثل MyClass.

- vendor اصطلاحا نام مخزن Git یک پروژه هست، مثل github.com/facebook/react که در اینجا facebook نام vendor و react نام پکیج هست.

- camelCase هم روش دیگه نام گذاری شناسه ها هست با این اصل که کاراکتر اول کلمات دوم به بعد بزرگ نوشته میشه و بقیه کوچک، مثل myMethod.
پاسخ
#5
اگه ممکنه کاملش کن خیلی مطلب مفیدی میتونه باشه. من خودم خیلی از این نکات رو نمیدونستم
پاسخ
تشکر شده توسط: sorkhabi
#6
با سلام
همون روش کارگری خودمونو عشق است D:
هیچکی هم از کدمون سر در نمیاره همیشه مشتری به خودمون وابسته است (دنبالمون بدو بدو کنه)
البته مطالب شما بسیار مفید هستند و ما هم سعی می کنیم استفاده کنیم.
پاسخ
تشکر شده توسط:
#7
بسیار مفید و کاربردی , آرزوی موفقیت
پاسخ
تشکر شده توسط: sorkhabi
#8
یک پیشنهاد :
زمانی که تعداد پاسخ هاتون زیاد شد تویه پاسخ اول لینک پاسخ های خودتون رو به ترتیب بزارید .
چون دوستان هم پاسخ ارسال می کنند و این کمی از نظم تاپیک کم می کنه پس بهتره تویه پاسخ اولتون لینک مباحثی که مطرح کردید رو بزارید تا پیمایش راحت تر بشه .
با تشکر از وقتی که میزارید .
پاسخ
تشکر شده توسط:
#9
(08-03-1394، 01:01 ق.ظ)morrning نوشته: اگه ممکنه کاملش کن خیلی مطلب مفیدی میتونه  باشه. من خودم خیلی از این نکات رو نمیدونستم

ان شاالله ادامه خواهد داشت
منتها وقتم محدوده
پاسخ
تشکر شده توسط: php , sorkhabi
#10
(15-03-1394، 12:40 ب.ظ)prans.info نوشته: یک پیشنهاد :
زمانی که تعداد پاسخ هاتون زیاد شد تویه پاسخ اول لینک پاسخ های خودتون رو به ترتیب بزارید .
چون دوستان هم پاسخ ارسال می کنند و این کمی از نظم تاپیک کم می کنه پس بهتره تویه پاسخ اولتون لینک مباحثی که مطرح کردید رو بزارید تا پیمایش راحت تر بشه .
با تشکر از وقتی که میزارید .

انجام شد
متشکر
پاسخ
تشکر شده توسط: sorkhabi




کاربران در حال بازدید این موضوع: 1 مهمان