Стандарты и стили кодинга
Правильные стандарты кодинга важны в любом проекте, а в особенности, если над одним и тем же проектом работают несколько разработчиков. Joomla! является хорошим примером такого массового проекта, а те кто пишут расширения для Joomla! и являются теми самыми разработчиками. Поэтому так важно придерживаться единого стандарта и стилей при написании своего расширения. Это поможет не только Вам в будущем разобраться, чего Вы там накодили, но и другим понять Ваш код. Все файлы должны: Орфография классов, функций, переменных и констант должна ориентироваться на правила British English (en_GB). Правда, возможны и некоторые исключения, например использование некоторых имён (к примеру Начиная с версии 1.6, весь новый код, который предлагается для включения в Joomla, должен быть E_STRICT-совместим. Это означает, что он не должен выдавать никаких предупреждений или ошибок, когда уровень отчёта ошибок PHP (error reporting level) установлен в E_ALL | E_STRICT. Используйте табуляцию для отступов, а не пробелы. Также убедитесь, что одно нажатие на табуляцию (tab-stop) установлено по длине в 4 пробела. Не существует лимита по длине строки – это остаётся на Ваше усмотрение. Придерживайтесь принципов читабельности кода. Включают в себя Управляющие структуры должны иметь один пробел между ключевым управляющим словом и открывающейся круглой скобкой, для того чтобы логически отделить их от вызовов функции. В шаблонах необходимо использовать альтернативный вариант: В логических операторах условных конструкций должны использоваться слова из заглавных букв ( За исключением конструкции Используйте отступы и перевод строки, а не изогнутые фигурные скобки, для улучшения читабельности в конструкциях При вызове функции не используйте пробел: между именем функции и открывающей скобкой, между открывающей скобкой и первым аргументом, между закрывающей скобкой и последним аргументом, и между точкой с запятой. Используйте пробел после запятой между аргументами (если они присутствуют). Должен быть один пробел до и после знака равенства (оператора присвоения). В случае блока связанных между собой присвоений, можно использовать табуляцию (не пробелы) для улучшения читабельности: При объявлении классов и функций придерживайтесь так называемого стиля «one true brace» Аргументы со значениями по умолчанию всегда указываются в конце списка всех аргументов. Всегда пытайтесь вернуть значение функции, если оно подразумевается: Внутренняя документация классов должна придерживаться соглашения PHPDoc: http://www.phpdoc.org/ Вообще старайтесь документировать как можно больше. Лучше оставить комментарий, чем потом забыть, как это работает, и пытаться вспомнить «а чего я тут накодил?». Допускаются и комментарии в стиле языка C (/* */), и стандартные C++ комментарии (//). Использование Perl/shell стиля (#) запрещено. Везде, где Вы безусловно подключаете файлы классов, используйте Всегда используйте для выделения PHP кода, а не укороченный вариант . Это самый переносимый метод включения PHP кода на различных операционных системах. Ключевые слова SQL должны быть написаны заглавными буквами, в то время как остальные идентификаторы должны быть написаны маленькими буквами. Не надо использовать возврат каретки (CR) так как Используйте метод Весь исходный код дистрибутива Joomla должен содержать следующий блок комментирования в заголовке: Для файлов класса Используйте следующие названия пакетов (package): Название суб-пакета (sub-package) варьируется от типа расширения: Обратите внимание на то, что код, который предназначен для ядра Joomla, не должен содержать тега В файлах, которые подключаются из сторонних источников, Док Блоки должны оставаться неизменёнными. В файлах шаблонов не обязательно использовать полные Док Блоки. Впрочем, необходимо указать Id тэг и блок прямого доступа: Имена классов должны иметь описательный характер. По возможности избегайте использования аббревиатур. Имена классов всегда должны начинаться с большой буквы и должны быть написаны в стиле CamelCase, даже несмотря на использование традиционных акронимов, состоящих только из заглавных букв (таких как XML, HTML). Исключение составляют классы фреймворка Joomla, которые должны начинаться с заглавной буквы ‘J’, и следующая буква тоже должна быть заглавной: Функции и методы должны называться в стиле «studly caps» (известным так же как «bumpy case» или «camel caps»). Первая буква имени маленькая, а каждая буква начинающая новое «слово» должна быть заглавной. Имя функции фреймворка Joomla должно начинаться с маленькой ‘j’. Некоторые примеры: Имена закрытых членов класса должны предваряться нижним подчёркиванием. Свойства должны писаться в стиле нижнего подчёркивания (слова должны быть разделены нижним подчёркиванием) и маленькими буквами. Например: Константы всегда должны писаться заглавными буквами, а слова разделяться нижним подчёркиванием. Предваряйте имена констант именем класса/пакета в котором они используются. Например, константы используемые классом Если требуется определение глобальных переменных, их имя должно начинаться с нижнего подчёркивания. Далее идёт имя класса/пакета написанное заглавными буквами и ещё одно нижнее подчёркивание. Например, класс Начиная с PHP5, Вы можете использовать статические свойства классов и константы вместо глобальных переменных: При названии регулярных переменных стоит придерживаться таких же соглашений, как и по функциям. При использовании ссылок, необходимо использовать пробел перед ссылочным оператором, и не должно быть пробела между ним и именем функции или переменной. Например: Все языковые ключи должны отображать тип строки, которую они представляют. Исключения составляют такие общие слова как: «Yes», «No», «Show», «Hide». Всегда помните, что если два расширения используют один и тот же языковой ключ, будет отображаться тот, который был загружен последним. В ключе используйте название расширения, к которому он относится. Например: Когда одно и тоже слово используется в двух разных местах, лучше всего использовать разные языковые ключи. Текст Toolbar и Linkbar должен предваряться Toolbar и Linkbar соответственно. Языковые ключи долины быть написаны как можно более натурально, и по возможности используя пробелы, а не нижние подчёркивания. Слишком длинные фразы желательно сокращать. Например, В общем, всегда необходимо представлять себе как будет выглядеть языковой файл, если все ключи будут отсортированы по алфавиту. Префиксы необходимо использовать для группировки текста с общим контекстом (к примеру, заголовки колонок). Суффиксы необходимо использовать для группировки элементов, которые логически связаны (к примеру, имя поля и его описание). Фразы не должны быть соединены с помощью конкатенации строк. Каждая фраза должна быть представлена отдельным языковым ключом. При этом старайтесь использовать В языковом файле это будет выглядеть так: Если же во фразе используется более одного динамического слова, то необходимо использовать Для компонентов с одним контроллером, название должно быть Именем файла, как правило, будет Если используется несколько контроллеров, то название должно быть Файлы располагаются в папке Придерживаемся в названии соглашения Файлы располагаются в папке Придерживаемся в названии соглашения Файлы располагаются в папке Компоненты с множественным представлением могут иметь необязательный «мастер» класс представления, который расширяют специализированные представления. Располагается он в папке компонента, и обычно называется Придерживаемся в названии соглашения Компоненты могут поддерживать различные шаблоны, которые выводят данные, поступающие от Представления и его Моделей. Шаблон обычно содержит в себе HTML разметку и немного PHP кода для отображения только логики: никаких функций, никаких классов. Шаблон состоит как минимум из одного Шаблон может использовать дополнительные http://docs.joomla.org/Coding_style_and_standardФормат файлов
- сохраняться как ASCII текст;
- иметь кодировку UTF-8;
- иметь формат Unix:
Все строки должны заканчиваться переводом строки (LF). Перевод строки должен быть представлен ординалом 10, октальным числом 012 и hex 0A. Не используйте возврат каретки (CR) как в компьютерах Macintosh или возврат каретки/перевод строки (CRLF) как в Windows.Стандарты кодинга
Орфография
$color
), которые сопоставимы с PHP API.Код должен быть E_STRICT-совместим
Отступы и длина строки
Управляющие конструкции
if, for, while, switch
, и т.п. Вот пример конструкции if
, так как эта конструкция является наиболее сложной по структуре:AND, OR
и т.п.), а не программные записи типа &&, ||
, и т.п.case
, желательно всегда использовать изогнутые фигурные скобки, несмотря на то, что технически они не обязательны. Используя их, мы значительно улучшаем читабельность и уменьшаем возможность логических ошибок при добавлении новых строк.
Для конструкции switch
:case
. Не должно быть отступа между условием и двоеточием.Вызов функций
А вот и пример:Определение функции
if (cond) { }
:Комментарии
Подключение кода
require_once
. При условном подключении (например, в фэктори методах) используйте include_once
. Так Вы будете уверены, что файл класса включён единожды. Они разделяют один и тот же список файлов, так что Вы можете не волноваться при их смешенном использовании – файл, подключённый через require_once не будет включён снова через include_once
.Тэги PHP кода
Для файлов, которые содержат только PHP код, закрывающий тэг ?> не нужен. Не включая его, Вы избегаете нечаянного включения пробела в выходной поток.SQL запросы
JDatabase::getQuery
сам позаботиться о форматировании. Впрочем, желательно использовать отступы для улучшения читабельности.
Запросы должны быть заключены в одинарные кавычки (так как такие текстовые блоки быстрее обрабатываются PHP).nameQuote()
для формирования названных элементов в запросе. Используйте метод Quote()
для формирования значений.nameQuote()
– устанавливает правильность разделителей в имени поля, а Quote()
– устанавливает правильность разделителей в передаваемом значении.
В названиях таблиц используйте префикс #_
а не jos_
.
Перед переменными цело-числовыми (integer) или с плавающей точкой (float) используйте (int), (float) или (double) соответственно.Док блоки (DocBlocks)
@package
в заголовке не требуется.
Классы, функции, константы, свойства класса и методы класса также должны быть снабжены блоком:
· Joomla.Administrator – все файлы, которые относятся к админке или бэкэнд приложениям
· Joomla.Installation – все файлы, которые относятся к приложению инсталляции
· Joomla.Plugin – все файлы плагина
· Joomla.Site – все файлы, которые относятся к фронтенду
· Joomla.XML-RPC – все файлы, которые относятся к XML-RPC приложению сервера
· Components – папка компонентов, например com_content
· Modules – папка модулей, например mod_latest_news
· Plugins – папка.элемент, например content.pagebreak
· Templates – папка шаблонов, например rhuk_milkyway
· Framework – ничего не пишем для файлов верхнего уровня (таких как factory.php
). Для папки первого уровня или для папки второго уровня пишем, например utilities
для joomla/utitilies/date.php
, html.html
для joomla/html/html/email.php
@author
. Философия Joomla такова, что код написан «всеми вместе», и отдельная персона не может быть владельцем какого-то из кусочков кода.Соглашения названий
Классы
JHtmlHelper
JXmlParser
JModel
Разработчикам сторонних расширений желательно называть свои функции используя уникальный префикс.Функции и методы
connect();
getData();
buildSomeWidget();
jImport();
jDoSomething();Константы
JError
все начинаются с «JERROR_».Глобальные переменные
JError
использует глобальную переменную $_JERROR_LEVELS
.Регулярные переменные и переменны класса
Переменные класса должны быть приведены к null или другому значению по умолчанию.Ссылки (References)
Языковые ключи
tooltips
для поля редактирования могут быть написаны вот так:spirntf
для замены динамических слов. Когда производится замена, то слово, которое заменяется, должно быть написано заглавными буквами, и нести в себе смысл замены. Это помогает переводчикам определить контекст замены:MESSAGE DELETED NUMBER ITEMS=Deleted %d Item(s)
printf
маркеры для сортировки замены, так как другие языки могут использовать различные направления перевода. Это достигается через %[number]$[printf_type]
:
Слева направо:PAGE X OF Y=Page %1$d of %2$d
Справа налево:PAGE X OF Y=%2$d of %1$d egaP
Контроллеры (Controllers)
[Name]Controller
.controller.php
и расположен этот файл в папке компонента.com_content
/ controller.php[Component]Controller[Name]
./controllers/
внутри папки компонента. Имя файла должно отображать имя контроллера:com_banner
/controllers/
/ banner.php
/ client.phpМодели (Models)
[Component]Model[Name]
./models/
внутри папки компонента. Имя файла должно отображать имя модели.com_banner
/models/
/ banner.php
/ client.phpПредставления (Views)
[Component]View[Name]
./view/
внутри папки компонента. Названия подпапок должны отображать имя Представления.com_contact
/views/
/view name 1/
/ view.html.php
/view name 2/
/ view.html.phpview.php
. В названии придерживаемся соглашения [Component]View.
com_content
/views/
/archive/
/ view.html.php
/article/
/ view.php
view.phpviews/archive/view.html.php
Плагины (Plugins)
[Folder]Plugin[Element]
.Шаблоны (Layouts)
.php
файла и .xml
файла (названия этих файлов должны совпадать), которые расположены в папке /tmpl/
Представления. Оба они отражают внутреннее имя Шаблона. Стандартный Шаблон называетсяdefault
.com_content
/views/
/article/
/tmpl/
/ default.php
/ default.xml
/ form.php
/ form.xml
/ pagebreak.php
/ pagebreak.xml.php
файлы для достижения контроля над выводимым содержимым и данными.
Стандарты и стили кодинга - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.