/**
  * Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
  * @see Engine::_CallModule
  *
  * @param string $sName Имя метода
  * @param array $aArgs Аргументы
  * @return mixed
  */
 public function __call($sName, $aArgs)
 {
     $this->PrepareBehaviors();
     /**
      * Проверяем на вызов метода поведения
      * Пропускаем служебные методы поведения
      */
     if (!in_array(strtolower($sName), array('attach', 'detach'))) {
         foreach ($this->_aBehaviors as $oObject) {
             if (func_method_exists($oObject, $sName, 'public')) {
                 return call_user_func_array(array($oObject, $sName), $aArgs);
             }
         }
     }
     /**
      * Если метод не найден, то запускаем стандартную обработку
      */
     return Engine::getInstance()->_CallModule($sName, $aArgs);
 }
 /**
  * Возвращает тип объекта для дополнительных полей
  *
  * @return string
  */
 public function getPropertyTargetType()
 {
     if ($sType = $this->getParam('target_type')) {
         return $sType;
     }
     /**
      * Иначе дополнительно смотрим на наличие данного метода у сущности
      * Это необходимо, если тип вычисляется динамически по какой-то своей логике
      */
     if (func_method_exists($this->oObject, 'getPropertyTargetType', 'public')) {
         return call_user_func(array($this->oObject, 'getPropertyTargetType'));
     }
 }