This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/includes/kohana/modules/userguide/guide/ru-ru/about.conventions.md
2011-05-03 09:49:01 +10:00

15 KiB
Raw Blame History

Соглашения

При работе с фреймворком приветствуется использование Kohana coding style. В нем используется BSD/Allman стиль расстановки фигурных скобок и прочего форматирования кода.

Имена классов и расположение файлов

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

Данные соглашения предусматривают:

  1. Не рекомендуется использовать CamelCase в имени класса, за исключением случаев, когда нежелательно создавать дополнительные поддиректории.
  2. Все файлы классов и директории должны быть в нижнем регистре.
  3. Все классы должны располагаться в директории classes, которая может быть на любом уровне каскадной файловой системы фреймворка.

[!!] В отличие от Kohana версии 2.x, в Kohana 3 нет разделения между "типами" классов: будь то "контроллер", "модель", "библиотека" или "хелпер". Все классы располагаются в директории "classes/" вне зависимости от того, являются ли они статическими "хелперами" или объектами "библиотеки". Вы вправе реализовывать любой дизайн класса, который Вам необходим: статический, синглтон, адаптер и т.п.

Примеры

Помните, нижнее подчёркивание в наименовании класса отвечает за разделение на директории и отражает расположение файла в файловой структуре проекта.

Название класса Файл
Controller_Template classes/controller/template.php
Model_User classes/model/user.php
Database classes/database.php
Database_Query classes/database/query.php
Form classes/form.php

Стандарты кодирования

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

Фигурные скобки

Используйте, пожалуйста, BSD/Allman стиль расстановки фигурных скобок.

Соглашение в именовании классов

В Kohana используется нижнее_подчёркивание в именовании классов. Именование с использованием camelCase не приветствуется.

Классы

// Корневые библиотеки используют суффикс _Core
class Beer_Core {

// При расширение функционала библиотеки суффикс не используется
class Beer extends Beer_Core

// Класс контроллера использует суффикс _Controller
class Apple_Controller extends Controller {

// Класс модели использует суффикс _Model
class Cheese_Model extends Model {

// Класс хелпера
class peanut {

Если Вы не передаёте параметры в конструктор при создании класса, не используйте круглые скобки при его объявлении:

// Правильно:
$db = new Database;

// Не правильно:
$db = new Database();

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

Имена функций должны быть в нижнем регистре и использовать нижнее_подчёркивание для разделения слов:

function drink_beverage($beverage)
{

Переменные

Все переменные должны быть в нижнем регистре и использовать нижнее_подчёркивание для разделения слов (camelCase использовать запрещено):

// Правильно:
$foo = 'bar';
$long_example = 'uses underscores';

// Не правильно:
$weDontWantThis = 'understood?';

Отступы

Используйте табуляцию для отступов в Вашем коде. Использование пробелов вместо табуляции строго запрещено.

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

$text = 'это разделённый на несколько строк длинный текст. Зачастую, '
	  . 'при многострочном разделении используют ограничение в 80 знаков '
	  . 'на строку. Для удобочитаемости кода крайне важно применять правильное '
	  . 'вертикальное выравнивание текста. Помните, что любые отступы '
	  . 'должны выполняться в виде табуляции, а вертикальное выравнивание уже '
	  . 'должно завершаться пробелами, которые идут сразу после табов .';

Конкатенация строк

Не используйте пробелы вокруг оператора конкатенации:

// Правильно:
$str = 'one'.$var.'two';

// Не правильно:
$str = 'one'. $var .'two';
$str = 'one' . $var . 'two';

Однострочные операторы

Однострочные операторы IF могут быть использованы лишь в случае прерывания выполнения кода (например, return или continue):

// Допустимо:
if ($foo == $bar)
	return $foo;

if ($foo == $bar)
	continue;

if ($foo == $bar)
	break;

if ($foo == $bar)
	throw new Exception('You screwed up!');

// Не допустимо:
if ($baz == $bun)
	$baz = $bar + 2;

Операторы сравнения

Используйте, пожалуйста, для сравнения операторы OR и AND:

// Правильно:
if (($foo AND $bar) OR ($b AND $c))

// Не правильно:
if (($foo && $bar) || ($b && $c))

Используйте, пожалуйста, elseif вместо else if:

// Правильно:
elseif ($bar)

// Не правильно:
else if($bar)

Конструкции switch

Каждый оператор case, break и default должны располагаться на новой строке. Блок внутри case и default должны иметь отступ в 1 таб.

switch ($var)
{
	case 'bar':
	case 'foo':
		echo 'hello';
	break;
	case 1:
		echo 'one';
	break;
	default:
		echo 'bye';
	break;
}

Круглые скобки

Необходимо отделять имя оператора и следующие за ним скобки пробелом. Оператор ! (оператор отрицания, восклицательный знак) для удобочитаемости должен быть выделен пробелом с обеих сторон.

// Правильно:
if ($foo == $bar)
if ( ! $foo)

// Не правильно:
if($foo == $bar)
if(!$foo)
if ((int) $foo)
if ( $foo == $bar )
if (! $foo)

Тернарные операторы

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

$foo = ($bar == $foo) ? $foo : $bar;
$foo = $bar ? $foo : $bar;

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

$foo = ($bar > 5) ? ($bar + $foo) : strlen($bar);

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

$foo = ($bar == $foo)
	 ? $foo
	 : $bar;

Приведение типов

При приведении типов, следует использовать пробелы вокруг оператора приведения:

// Правильно:
$foo = (string) $bar;
if ( (string) $bar)

// Не правильно:
$foo = (string)$bar;

По возможности, используйте приведение типов вместо тернарных операторов:

// Правильно:
$foo = (bool) $bar;

// Не правильно:
$foo = ($bar == TRUE) ? TRUE : FALSE;

При приведение к числовому или булеву типам, используйте сокращённый формат:

// Правильно:
$foo = (int) $bar;
$foo = (bool) $bar;

// Не правильно:
$foo = (integer) $bar;
$foo = (boolean) $bar;

Константы

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

// Правильно:
define('MY_CONSTANT', 'my_value');
$a = TRUE;
$b = NULL;

// Не правильно:
define('MyConstant', 'my_value');
$a = True;
$b = null;

При сравнении располагайте константы в конце:

// Правильно:
if ($foo !== FALSE)

// Не правильно:
if (FALSE !== $foo)

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

если переменная $foo в точности не является FALSE

И для неверного:

если FALSE в точности не является переменной $foo

Так как наш язык предусматривает чтение слева направо, то и нет причин для того, чтобы ставить константу первой при сравнении.

Комментарии

Однострочные комментарии

Используйте // перед строкой комментария, делайте отступ и начинайте комментарий с заглавной буквы. Никогда не используйте для комментариев #.

// Правильно

//Не правильно
// не правильно
# Не правильно

Регулярные выражения

При использовании регулярных выражений, используйте синтаксис PCRE вместо POSIX. PCRE признан более мощной и быстрой библиотекой регулярных выражений.

// Правильно:
if (preg_match('/abc/i'), $str)

// Не правильно:
if (eregi('abc', $str))

Используйте одинарные кавычки вокруг регулярного выражения. Одинарные кавычки удобочитаемы ввиду их простоты. Строки, заключённые в одинарные кавычки, в отличие от двойных кавычек, не поддерживают интерполяцию переменных и конструкции с обратным слешем (\n, \t и т.д.).

// Правильно:
preg_match('/abc/', $str);

// Не правильно:
preg_match("/abc/", $str);

При использовании регулярного выражения для поиска и замены, используйте $n нотацию для ссылок. Это более предпочтительно, нежели \n.

// Правильно:
preg_replace('/(\d+) dollar/', '$1 euro', $str);

// Не правильно:
preg_replace('/(\d+) dollar/', '\\1 euro', $str);

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

$str = "email@example.com\n";

preg_match('/^.+@.+$/', $str);  // TRUE
preg_match('/^.+@.+$/D', $str); // FALSE