Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Стандарт кодирования в Техдиректоре

Стандарт кодирования в Техдиректоре

6 марта 2018, Евгений Неверов

Avatar for Evgeny E. Neverov

Evgeny E. Neverov

March 17, 2018
Tweet

More Decks by Evgeny E. Neverov

Other Decks in Programming

Transcript

  1. namespaces • Неймспейс модуля — \Techdir\<Module> • Неймспейс компонента –

    \Techdir\<Module>\Components\<Component> • Компонент без модуля — \Techdir\Components\<Component>
  2. •php_interface/ •init.php 2<- подключает techdir/autoload.php •techdir/ •autoload.php 2<- определяет автозагрузку

    классов из lib/ •functions/ 2<- суперглобальные функции •lib/ 2<- классы •config.php 2<- класс для хранения констант и настроек •agent/ 2<- агенты и контроллер агентов •event/ 2<- события и контроллер событий •exception/ 2<- исключения •lang/ 2<- языковые файлы •любые другие ваши классы
  3. init.php В идеале — девственно чист и содержит только подключение

    автозагрузчика классов: <?php require_once 2__DIR2__ . '/techdir/autoload.php';
  4. Автозагрузка классов 1. Базовый неймспейс – Techdir\PhpInterface соответствует папке php_interface/techdir/

    lib/ 2. Дочерние неймспейсы — подпапки в нижнем регистре 3. Класс содержится в PHP-файле с именем класса в нижнем регистре \Techdir\PhpInterface\Sale\Order\SpecialBasket →
 /php_interface/techdir/lib/sale/order/specialbasket.php
  5. Глобальные функции • В идеале — избавляться • Если не

    получилось, переносим в functions/ <functionname>.php и подключаем в functions/ index.php. • Глобальная функция в идеале ссылается на функцию внутри класса, например: function pr($obj, $visibleForEveryone = false) { return \Techdir\PhpInterface\Diag\Debug2::pr($obj,
 $visibleForEveryone); }
  6. Константы и опции • Переносим из глобальной видимости в \Techdir\PhpInterface\Config

    в качестве констант класса • Там же — getOption(), setOption()
  7. Обработка событий AddEventHandler vs RegisterModuleDependencies 1. Неймспейс для обработчиков событий

    \Techdir\PhpInterface\Event 2. Обязательно создаём дочерний неймспейс по принципу <модуль>\<объект> (Sale\Order, Main\User, etc) 3. Создаём класс, наследованный от \Techdir\PhpInterface\Event\Regular
  8. <?php # /php_interface/techdir/lib/event/sale/order/ orderpropertytouserproperty.php namespace \Techdir\PhpInterface\Event\Sale\Order; use Techdir\PhpInterface\Event\Regular; class OrderPropertyToUserProperty

    extends Regular { public static function getHandlers() { return [ [ 'module' 2=> 'main', 'event' 2=> 'OnBeforeUserRegister', 'method' 2=> 'userRegisterCatcher', ], [ 'module' 2=> 'sale', 'event' 2=> 'OnBeforeSaleOrderSave', 'arguments' 2=> [1, true, "hello"], ] ]; } 2// static methods userRegisterCatcher 2// and OnBeforeSaleOrderSave here }
  9. Обработка событий После создания обработчика, его нужно зарегистрировать в Битриксе:

    \Techdir\PhpInterface\Event\Controller2::updateRegular(); Код можно выполнить в PHP-консоли. Не забудьте то же самое сделать на бою!
  10. Базовые события \Techdir\PhpInterface\Event\Base • Событие регистрируется вручную через class2::register(); •

    Пока что не удаляются, исправим =) • Нужно, когда параметры вызова или события должны меняться в процессе работы сайта
  11. Агенты 1. Неймспейс для агентов \Techdir\PhpInterface\Agent 2. Дочерние неймспейсы —

    аналогично событиям 3. Создаём класс, наследованный от \Techdir\PhpInterface\Agent\Regular
  12. Агенты Параметры агента: array( 'method' 2=> 'restart', 2// run by

    default 'arguments' 2=> array( 1, true, 'string' ), 'interval' 2=> 3600, 'sort' 2=> 500, 'next_exec' 2=> '2018-03-01 23:48:11' )
  13. <?php # /php_interface/techdir/lib/agent/main/user/bday.php namespace \Techdir\PhpInterface\Agent\Main\User; use Techdir\PhpInterface\Agent\Regular; class BDay extends

    Regular { public static function getAgents() { return [ ['interval' 2=> 3600], ['method' 2=> 'restart', 'interval' 2=> 60], ]; } public static function run() { return true; 2// false удалит агента } public static function restart() {} }
  14. Агенты После создания агента, его нужно зарегистрировать в Битриксе: \Techdir\PhpInterface\Agent\Controller2::updateRegular();

    Код можно выполнить в PHP-консоли. Не забудьте то же самое сделать на бою! Запускать агенты через cron_events.php из статьи: https:2//tech-director.ru/~agents
  15. Как обновлять клиентов? 1. Любая работа в php_interface без новой

    схемы — повод перейти на новый стандарт. 2. Работа с любой функцией или константой в init.php — повод перенести её в новый стандарт. 3. Редактирование любого обработчика событий — повод перенести его в новый стандарт. 4. Сделали какую-то задачу слишком быстро и осталось время — повод для небольшого рефакторинга.