/** * Метод безопасно получает контент. * В случае возникновения ошибки возвращает её стек. */ public static function getContent($objOrTpl, $method = 'buildContent') { $isCallable = is_callable($objOrTpl); $isTpl = $objOrTpl instanceof Smarty_Internal_Template; if (!$isCallable && !$isTpl) { check_condition(is_object($objOrTpl), 'Not object passed to ' . __FUNCTION__); PsUtil::assertMethodExists($objOrTpl, $method); } $returned = null; $flushed = null; ob_start(); ob_implicit_flush(false); try { if ($isCallable) { $returned = call_user_func($objOrTpl); } else { if ($isTpl) { $returned = $objOrTpl->fetch(); } else { $returned = $objOrTpl->{$method}(); } } } catch (Exception $ex) { ob_end_clean(); return ExceptionHandler::getHtml($ex); } $flushed = ob_get_contents(); ob_end_clean(); return isEmpty($returned) ? isEmpty($flushed) ? null : $flushed : $returned; }
/** * @covers PsUtil::assertMethodExists */ public function testAssertMethodExists() { PsUtil::assertMethodExists(ClassA::get__CLASS__(), 'get__FILE__'); PsUtil::assertMethodExists(ClassA::get__CLASS__(), 'protected_method'); PsUtil::assertMethodExists(new ClassA(), 'private_final_method'); try { PsUtil::assertMethodExists(new ClassA(), self::NOT_ALLOWED_STR); $this->fail('Exception is expected'); } catch (PException $ex) { //OK } }
/** * Имплементация метода, выдающего очки пользователю */ private function checkPointsImpl(FoldedClass $class, array $func_get_args, $method) { /** * Проверим, является ли класс наследником PointsGiver. * Менеджером он может и не быть, но гивером он быть обязан!:) */ PsUtil::assertInstanceOf($class, 'PointsGiver'); PsUtil::assertInstanceOf($class->getFoldedEntity()->getFolding(), 'PointsGiverFolding'); //Проверим наличие метода-имплементации $method = $method . 'Impl'; PsUtil::assertMethodExists($class, $method); /** @var PsUser */ $user = $func_get_args[0]; check_condition($user instanceof PsUser, 'Пользователь должен быть передан в первом аргументе'); $ctxt = new GivePointsContext($user->getId(), $class->getFoldedEntity()->getDbCode()); $func_get_args[0] = $ctxt; call_user_func_array(array($class, $method), $func_get_args); return $this->checkGivePointsContext($user, $ctxt); }