try catch php 为什么要用,架构师告诉你,为什么我们要使用 try catch

简单记录一个实际案例class ContainerAwareHttpKernel extends HttpKernel

{

public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)

{

$this->container->enterScope('request');

$this->container->set('request', $request, 'request');

try {

$response = parent::handle($request, $type, $catch);

} catch (\Exception $e) {

$this->container->set('request', null, 'request');

$this->container->leaveScope('request');

throw $e;

} catch (\Throwable $e) {

$this->container->set('request', null, 'request');

$this->container->leaveScope('request');

throw $e;

}

$this->container->set('request', null, 'request');

$this->container->leaveScope('request');

return $response;

}

}

class HttpKernel implements HttpKernelInterface, TerminableInterface

{

public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)

{

$request->headers->set('X-Php-Ob-Level', ob_get_level());

try {

return $this->handleRaw($request, $type);

} catch (\Exception $e) {

if ($e instanceof ConflictingHeadersException) {

$e = new BadRequestHttpException('The request headers contain conflicting information regarding the origin of this request.', $e);

}

if (false === $catch) {

$this->finishRequest($request, $type);

throw $e;

}

return $this->handleException($e, $request, $type);

}

}

}

class LiveCourseLessonManageController extends BaseController

{

$id = $this->getCourseService()->create();

}

class CourseServiceImpl extends CourseService

{

public function create()

{

throw new \RuntimeException("管理员关闭了课程创建功能");

}

}