Версия: 5.x
Правила оформления PHP кода

Код, написанный в едином стиле улучшает "читабельность" кода и положительно сказывается на скорости разработки. Просим придерживаться следующих правил при разработке дополнительных модулей для ReadyScript.

Переменные

Имена переменных состоят только из строчных символов, слова разделяются символом «подчеркивание». Имя переменной должно отражать суть её содержимого. Недопустимо использовать сокращенные слова в именах переменных, например: prop вместо property.

Пример:

В объявлениях переменных:

protected
$orm_object,
$used_address,
$example;

В аргументах методов класса:

function example($check_data_before = true, $referer = null)

Именование пространств имен, классов, интерфейсов, методов

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

Пример:

class Product extends \RS\Orm\OrmObject
{
}
//или
namespace RS\Orm;
abstract class AbstractObject
{
}
//или
namespace RS\Router;
interface RouterInterface
{
}

Именование констант

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

Пример:

abstract class AbstractObject
{
const
FLAG_INSERT = 'insert',
FLAG_UPDATE = 'update',
FLAG_REPLACE = 'replace',
}

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

В конструкциях if, foreach, for, case открывающая фигурная скобка должна располагаться на одной строке с вышеперечисленными конструкциями.

Пример:

if ($a > $b) {
//...
}
foreach($array as $key => $value) {
//...
}
Switch ($name) {
case 'artem': {
//...
break;
}
case 'zina': {
//...
break;
}
}

В конструкциях class, interface, function открывающая фигурная скобка должна располагаться на следующей строке, после вышеперечисленных конструкций.

Пример:

class OrmObject extends AbstractOrmObject
{
function __construct()
{
//...
}
function setTile()
{
//...
}
}

Комментарии к классам, методам, переменным, константам

Для обозначения комментариев к классам, методам, переменным, константам используется конструкция:

/ **
* Комментарий
*/

Текст, поясняющий работу определенного фрагмента кода, должен оформляться следующим образом:

$size = $this->getOption('size'); // Комментарий к фрагменту кода

Комментарий к классу должен начинаться непосредственно перед объявлением класса. Комментарий к функции должен содержать пояснение действия функции, описания типов и назначений аргументов (с помощью конструкции @param), а также тип возвращаемого функцией результата (с помощью конструкции @return). Комментарий может содержать и другие конструкции, соответствующие формату PhpDoc.

Пример:

namespace Catalog\Model;
/ **
* Класс предоставляет API функции для работы с товарами.
* /
{
const
/ **
* Режим работы, при котором запись происходит сразу в БД
* /
MODE_NORMAL = 'normal';
protected static
/ **
* Singleton instance
* @var ProductApi
* /
$instance;
public
/ **
* Информация о времени выполнения запросов к БД,
* заполняется после вызова метода getList.
* /
$time_debug = array();
/ **
* Загружает свойства cost и xcost в объекты товаров, с учетом текущей группы
* пользователя, для списка товаров
*
* @param array of Orm\Product - список товаров
* @return array of Orm\Product - возвращает список товаров
* /
public function addProductsCost(array $products)
{
//...
}
}

Отступы и расстояния

Каждый функциональный блок, определенный знаками {}, должен иметь отступ от предыдущего равный 4-м пробелам или 1 знаком табуляции. Во время выполнения операции присвоения, оператор присвоения должен быть с двух сторон отделен пробелами.

Пример:

$a = $b;
$a = array(
'first' => 'firstvalue',
'second' => 'secondvalue'
);

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

Пример:

$a = ($b > $c) && ($d != $f);
if ($b !== false) {
//...
}

Правила инициализации массивов в коде

Каждый элемент ассоциативного массива должен быть задан с новой строки.

Пример:

$array = array(
'Артем' => 'value_1',
'Константин' => 'value_2',
'Семен' => 'value_3'
);
//или
->select()
->from(new Orm\Product())
->where(array(
'id' => 135,
'site_id' => 1
))
->objects();