[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Стиль кодирования
twin
Зачастую в вопросах приводится такой листинг, что обфускатор отдыхает. Это никак не способствует появлению желания как то разобраться и помочь.
А по сему, крайне желательно придерживаться какого то определенного стиля кодирования, делая код максимально читабельным.

Есть несколько общепринятых стилей. По поводу того, как лучше и правильней, постоянно идут споры и всякая война с немцами.
По этому данная статья носит рекомендательный, а не стандартизирующий характер.

Ни кто ни в коей мере не навязывает данный стиль, но если вопрос с листингом выностися на форум, нужно уважать отвечающих и стараться хоть как то делать код читабельным. Иначе есть риск остаться без ответа.

Пройдя предварительное обсуждение и правки, комада экспертов форума пришла к мнению рекомендовать следующие неписанные правила:
(если покажется много букаф, тут по проще) А кто совсем читать не умеет, тому сюда.

Если появилось желание попротивиться :angry: или обсудить и внести свои предложения, :) сделать это можно в этой ветке.

1. Форматирование PHP-файлов
1.1. Общее


Обрамление PHP-кода
PHP-код должен всегда обрамлятся полными PHP-тегами:
<?php
?>

Короткие теги не допустимы.

Для файлов, содержащих только PHP-код, закрывающийся тег ("?>") не разрешен. Он не требуется синтаксисом PHP. Это предотвращает от случайного включения в вывод конечных пробелов.

1.2. Отступы

Для отступа используйте пробелы. Не используйте символ табуляции.

Начало строки дложно предварятся минимум двумя пробелами.

1.3. Максимальная длина строки

Рекомендуемая длина строки составляет 80 символов, т.е. разработчики должны стремиться держать код как можно ближе к 80-символьной границе, когда это возможно. Однако более длинные строки также допустимы. Максимальная длина любой строки PHP-кода не должна превышать 120 символов.

1.4. Переводы строк

Переводы строк должны быть как принято для текстовых файлов в Unix-системах. Строки должны заканчиваться только символом перевода на новую строку (LF) (\n). Символ перевода на новую строку в десятичном виде представляется как число 10, или как 0x0A в шестнадцатеричном.

Не используйте комбинацию символов возврата каретки/перевода строки (CRLF, \r\n) как на Windows-компьютерах (0x0D, 0x0A).

2. Имена файлов и директорий
2.1. Символы


Для файлов и директорий допустимы буквенно-числовые символы (латиница) и символы нижнего подчеркивания.
Пробелы и разделение точкой запрещены.

2.2. Суть

Имена файлов отражаются на имена классов, как описано ниже.

3. Переменные
3.1. Имена переменных


Имена переменных могут содержать буквенно-числовые символы. Числа разрешены в именах переменных, но не приветствуются.

Для переменных – членов классов не делать различия между public и private переменными и ставить подчеркивание только при необходимости – например, при использовании «магических» методов. остальные переменные писать без подчеркивания

Переменные – члены классов определенные с помощью префикса области видимости “public” никогда не должны начинаться с символа нижнего подчеркивания.

Многословность приветствуется. Имена переменных должны быть настолько говорящими, насколько это практично. Краткие имена переменных, такие как "$i" и "$n" не приветствуются нигде, кроме как в контексте маленьких циклов. Если цикл содержит более 20 строк кода, то переменные для индексов должны иметь более говорящие имена.

4. Константы

Константы могут содержать буквенно-числовые символы и символы нижнего подчеркивания. Числа разрешены в именах констант.

Имена констант должны быть в верхнем регистре.

5. Классы
5.1. Названия классов


Использовать схему именования классов, в соответсвтвии с которой имена классов напрямую указывают на директории, где они находятся.

Имена классов могут содержать только буквенно-числовые символы. Числа допустимы в именах классов, но не приветствуются. Символы нижнего подчеркивания допустимы в местах разделителей пути – имя файла «main/db/table.php» должно указывать на класс с именем “Main_Db_Table”.

Если имя класса состоит из более чем одного слова, то первая буква каждого слова должна быть заглавной. Последующие заглавные буквы недопустимы, например, имя класса “Main_PDF” – недопустимо, в то время как имя “Main_Pdf” допустимо.

5.2. Интерфейсы

Интерфейсы должны следовать той же схеме именования, как и классы (смотрите выше), однако должны заканчиваться словом “Interface”, как в следующих примерах:


Main_Log_Adapter_Interface
Main_Controller_Dispatcher_Interface


5.3. Функции и методы

Имена функций могут содержать буквенно-числовые символы. Числа разрешены в именах функций, но не приветствуются.

Многословность приветствуется. Имена функций должны быть настолько говорящими, насколько это практично для повышения понимаемости кода.

Для объектно-ориентированного программирования принято, чтобы методы доступа имели префикс “get” или “set”. Когда используются шаблоны проектирования, такие, как «синглтон» или «фабрика», имена методов должны содержать имя шаблона, чтобы можно было быстро узнать шаблон.

Функции в глобальной области видимости («плавающие функции») допустимы, но не приветствуются. Рекомендуется обрамлять такие функции в статические классы.

6. Стиль кодирования
6.1. Операторы


Все операторы отделяются пробелами.


    if ($var == 10 || $var > 100)


6.2. Конкатенация

Операторы конкатенации или перечисления так же отделяются пробелами.


    echo $var . 'строка' . $var; 

    echo $var1, $var2, $var3;

6.3. Строковые литералы

Когда строка является литеральной (не содержит подстановок переменных), для ее обрамления должны использоваться апострофы или «одинарные кавычки»:


    $a = 'Example String';


6.4. Строковые литералы, содержащие апострофы

Когда строка литералов сама содержит апострофы, разрешается для обрамления строки использовать «двойные кавычки». Это особенно актуально для SQL-запросов:


    $sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";


Синтаксис выше является более предпочтительным, чем экранирование апострофов.

6.5. Подстановка переменных

Подстановка переменных осуществляется методом конкатенации или перечисления.
Для улучшения читабельности запрещается подстановка переменных внутри двойных кавычек и с помощью фигурных скобок.

6.6. Массивы
6.6.1. Массивы с числовыми индексами


Отрицательные числа в качестве индексов запрещены.

Когда определяется индексированный массив с помощью конструкции array, завершающий пробел должен быть добавлен после каждой запятой для улучшения читабельности:


    $sampleArray = array(1, 2, 3, 'PHP', 'Forum');


Также разрешается определять многострочные индексированные массивы, используя конструкцию “array”. В этом случае, каждая следующая строка должна быть дополнена пробелами так, чтобы начало каждой строки было выравнено как показано ниже:


    $sampleArray = array(1, 2, 3, 'PHP', 'Forum', 
                         $a, $b, $c, 
                         56.44, $d, 500);


6.6.2 Ассоциативные массивы

Когда определяется ассоциативный массив с помощью конструкции “array”, приветствуется разделение выражения на несколько строк. В этом случае, каждая следующая строка должна быть дополнена с помощью пробелов так, чтобы и ключи и значения были выровнены.
Закрывающая скобка на новой строке.
Допускается запятая после завершающего элемента массива.


    $sampleArray = array( 
                         'firstKey'  => 'firstValue', 
                         'secondKey' => 'secondValue', 
                        );


6.3. Классы
6.3.1. Определение класса


Фигурная скобка всегда пишется на следующей строке под именем класса.

Каждый класс должен иметь блок документации (doc-блок) в соответствии со стандартом PHPDocumentor.

Код внутри класса должен иметь отступ в четыре пробела.

Только один класс разрешен внутри одного PHP-файла.
Размещение дополнительно кода в файле с классом разрешено, но не приветствуется. В таких файлах, две пустые строки должны разделять класс и дополнительный PHP-код.

6.3.2. Переменные-члены классов

Любые переменные, определенные в классе, должны быть определены в начале класса, до определения любого метода.

Ключевое слово var запрещено.

Члены класса должны всегда определять их область видимости, используя ключевое слово private, protected или public.
Доступ к переменным-членам класса напрямую используя префикс public разрешено, но не приветствуется в пользу методов доступа (set/get).

6.3.3. Определение функций и методов

Функции внутри классов должны всегда определять свою область видимости с помощью одного из префиксов private, protected или public.

Как и у классов, фигурная скобка всегда пишется на следующей строке под именем функции. Пробелы между именем функции и круглой скобкой для аргументов отсутствуют.

Передача по ссылке во время вызова запрещена. Возвращаемое значение не должно обрамляться в круглые скобки, иначе это ухудшает читабельность, а также может поломать код, если метод позже станет возвращать результат по ссылке.

6.4. Управляющие структуры
6.4.1. If / Else / Elseif


Внутри выражения условия между круглыми скобками операторы должны разделяться пробелами для читабельности.

Открывающаяся фигурная скобка пишется под условием, на отдельной строке. Закрывающаяся фигурная скобка пишется строго под открывающей, так же на отдельной строке.


    if ($a != 2)  
    { 
        $a = 2; 
    }


Излишние фигурные скобки (при выполнении одного оператора) не приветствуются. Для выражения “if”, включая “elseif” или “else”, форматирование должно быть таким, как в следующем примере:


    if ($a != 2) 
        $a = 2; 
    else  
        $a = 7; 


    if ($a != 2) 
    {  
        $a = 2; 
    } 
    elseif ($a == 3) 
    { 
        $b = 5;  
        $a = 4; 
    } 
    else 
    {  
        $a = 7; 
    }

Вложенные выражения сдвигаются вправо. Использовать можно 2 или 4 пробела. Блоки желательно отделять друг от друга пустой строкой.
<?[SPAN=darling][SPAN=darling]php[/SPAN][/SPAN]

    if ($a != 2) 
    { 
      $b = 2; 

        if ($a == 3)
        $b = 3;  
    }


6.5. Switch

Фигурная скобка всегда пишется на следующей строке под оператором swith.
Все содержимое между фигурными скобками пишется с отступом в четыре пробела. Содержимое каждого “case” выражения должно писаться с отступом в дополнительные два или четыре пробела. Фигурные скобки в “case” не требуются.


    switch ($numPeople)  
    { 
        case 1: 
            break; 

        case 2: 
            break; 

        default: 
            break; 
    }


Ключевое слово default никогда не должно опускаться в выражении switch.

ЗАМЕЧАНИЕ: Иногда полезно писать case выражения, которые передают управление следующему case выражению, опуская break или return. Для того, чтобы отличать такие случаи от ошибок, каждое case выражение, где опущен break или return, должно содержать комментарий
// break intentionally omitted

7. SQL запросы.

"SELEСT `u`.`id_user`, `u`.`id_parent`, `u`.`user_name`
  FROM `"
. DB_PREFIX ."user` AS `u`
    LEFT JOIN `"
. DB_PREFIX ."photo` AS `p` ON `u`.`id_user` = `p`.`id_author`
  WHERE `p`.`photo_id` != 0
    AND (`u`.`town` = '"
 . $town . "' OR `u`.`town` = '" . $city . "')
    AND `u`.`town` != 'closed'
    AND `u`.`param` != 'param'
    AND `u`.`param` = 'elem'
  ORDER BY `u`.`id_user` DESC
  LIMIT 10"


Обсуждение тут

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.