/** * Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля * @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')); } }