====== Стандарты оформления PHP кода ====== - Правильное именование переменных и функций. - Имена глобальных переменных и констант должны вводиться в верхнем регистре - Префикс переменной определяет её тип. Для переменной типа string следует использовать префикс «s», например $sInput. Для bool – «b». Для объектов – это «o», например, $oBook, для массива - «a». При этом, если у нас есть массив с данными одного типа, то помимо префикса массива, нужно указывать еще и тип элементов массива, например, $aoBooks. Кстати, предусмотрен префикс и для смешанных типов mixed – «m». - Переменные, определенные в классе, как private всегда носят префикс «_», например, $_oController - Временные переменные и итераторы следует называть коротко. Например, i, j, k, l, m, n. Для строковых и числовых временных переменных рационально использование названий без префикса, например $name, $pass, $counter. - Переменные, использующие несколько слов в названии, пишутся слитно, без знака «_». Например, $oBookComment. Но если речь идет о константе или глобальной переменной, то здесь целесообразно использование знака «_». Например, $CACHE_DIR. - Для имен методов и функций следует применять те же правила, что и для переменных. Начинаться имена методов и функций должны с символов в нижнем регистре. - При создании модели объекта с неопределенной выборкой, например, $oShopItems = Core_Entity::factory(‘shop_item’) имя переменной должно быть во множественном числе с содержанием префикса o - object. При уточнении выборки и получении массива объектов $aoShopItems = $oShopItems->findAll() префикс должен быть ao - array of objects. При создании модели конкретного объекта имя переменной должно быть в единственном числе, например, $oShopItem = Core_Entity::factory(‘shop_item’, 25). - Использование пустого пространства и фигурных скобок. - Чтобы усилить логическую структуру кода, следует использовать переносы строк – пустое пространство. Не бойтесь ставить переносы строк, давайте коду как можно больше свободы, но без излишеств - двойные переносы строк делать не следует. - Cледует разбивать блоки инициализации ряда переменных по логическому смыслу, например $name = "testname"; $login = "testlogin"; $pass = "testpass"; $oSite = Core_Entity::factory('site', $site_id); $oUser = Core_Entity::factory('user', $user_id); $oController = new Core_Controller($oUser); Первый блок с переменными содержит какие-то предустановленные значения. Второй – создание объектов. Третий – контроллера. Следует записать так: $name = "testname"; $login = "testlogin"; $pass = "testpass"; $oSite = Core_Entity::factory('site', $site_id); $oUser = Core_Entity::factory('user', $user_id); $oController = new Core_Controller($oUser); - Управляющие конструкции – условия и циклы следует отделять переносами. Например, $bonus = 0; /* Вычисляем сумму бонусов товаров */ foreach ($aoShopOrderItems as $oShopOrderItem) { $bonus += $this->getBonus($oShopOrderItem->shop_item_id); } return $bonus; - Фигурные скобки всегда следует отделять переносом строки. - Отступы - Отступы внутри управляющих конструкций должны присутствовать обязательно. - Также отступы и переносы строк следует использовать в сложных условиях и в сложных конструкциях, подразумевающих создание вложенных объектов. if (isset(Core_Page::instance()->object) && strpos( get_class(Core_Page::instance()->object), 'Informationsystem_Controller_Show' ) !== false ) { $Informationsystem_Controller_Show ->addEntity( Core::factory('Core_Xml_Entity') ->name('current_group_id') ->value(intval(Core_Page::instance()->object->group)) )->addEntity( Core::factory('Core_Xml_Entity') ->name('current_item_id') ->value(intval(Core_Page::instance()->object->item) ) ); } - Не используйте оператор echo для вывода HTML-кода. Следует использовать закрывающие и открывающие PHP-теги: - Вставки кода должны быть окружены копирайтами с комментарием. Пример /** * В этой строке должен быть комментарий о том, что делает код внутри комментариев. * * @author Kuts Artem, KAD Systems (©) 2017 * @date 18-11-2017 * Начало >> */ /** * << Конец * @author Kuts Artem, KAD Systems (©) 2017 * @date 18-11-2017 */ - Параметры методов класса указываются в порядке: входные значения, изменяемые значения, выходные значения. - При написании кода допускается использовать языковые конструкции совместимые с версией интерпретатора 5.2.2+, такая совместимость [[https://www.hostcms.ru/hostcms/system-requirements/|заявлена в требованиях]] к последней версии HostCMS, и такую совместимость необходимо поддерживать в своем коде.