ООП в своем компоненте

Минималистичный скрипт для использования ООП в своем компоненте Bitrix.

Оказывается, канонично использовать class CDemoTest extends CBitrixComponent{} с методом executeComponent().

Все что написано ниже, оставлено для истории. Пользоваться этим не рекомендуется.

component.php
<?php
// пространство имен - не обязательно
namespace Myspace;
 
// если работаем в пространстве имен - создаем "алиасы"
use \CBitrixComponent as CBitrixComponent,
    \CModule as CModule;
 
// защита от прямого вызова
defined('B_PROLOG_INCLUDED') or die();
 
// защита, если компонент используется на странице более одного раза
if(!class_exists('MyComponent')) {
 
  class MyComponent {
 
    // зависимости
    protected $bxComponent, $app, $db, $user, $userID, $cacheID;
 
    public function __construct(CBitrixComponent $bxComponent) {
      $this->bxComponent = $bxComponent;
      // Связываем классические $arResult и $arParams со свойствами объекта
      $this->arResult =& $this->bxComponent->arResult;
      $this->arParams =& $this->bxComponent->arParams;
 
      // создаем ссылки на глобальные переменные
      global $APPLICATION, $DB, $USER;
      $this->app = $APPLICATION;
      $this->db = $DB;
      $this->user = $USER;
      $this->userID = $this->user->GetID();
 
      CModule::IncludeModule('iblock');
    }
 
    protected $cacheParams;
    public function run() {
      // параметры, от которых зависят данные кеша
      // например, array($this->userID, $this->arParams['SECTION_ID'])
      $this->cacheParams = array();
      $this->tryViewCache();
      // тут свой код
      $this->viewIndex();
    }
 
    // Пробуем кеширование
    protected function tryViewCache() {
      if (!$this->bxComponent->startResultCache(false, $this->cacheParams)) {
        $this->bxComponent->IncludeComponentTemplate();
      } else {
        $this->bxComponent->abortResultCache();
      }
    }
 
    protected function viewIndex() {
      if ($this->bxComponent->startResultCache(false, $this->cacheParams)) {
        $this->bxComponent->IncludeComponentTemplate();
        $this->bxComponent->endResultCache();
      }
    }
 
  }
}
 
$Component = new MyComponent($this);
$Component->run();