[PHP] try catch在日常中的使用
2023-02-18 15:41:21 时间
1.try catch可以捕获上一层throw的异常
2.finally是不管try或者catch任何一块有return, 最终都会执行的块
3.try也是可以捕获到call_user_func_array回调函数类内部的throw的异常
4.call_user_func_array只能回调类的静态方法,可以在这个静态方法中进行new对象
5.在不自定义任何错误处理函数的情况下,try是不能捕获php本身的错误的,包括notice warning error等级别
下面的代码是项目中的一个部分,经过了多层调用和回调
<?php class Oss { public static function connect() { throw new Exception("oss connect error"); return 'oss object'; } } //调用三层 class S3{ public static function connect() { //throw new Exception("s3 connect error"); return 's3 object'; } } //调用二层 function callReader($class,$url){ try{ $conn=call_user_func_array(array($class, "connect"),array()); return $conn; }catch(Exception $e){ throw $e; }finally{ //无论如何都会执行,在这记录日志 } } //调用一层 function getMessage(){ $conn=null; try { $conn=callReader('Oss',"http://xxxx"); } catch (Exception $e1) { $conn=callReader('S3',"http://xxxx"); } return $conn; } //最先的入口 try{ var_dump(getMessage()); }catch(Exception $e){}
相关文章
- 多角度让你彻底明白yield语法糖的用法和原理及在C#函数式编程中的作用
- Linq下有一个非常实用的SelectMany方法,很多人却不会用
- 当模板方法遇到了委托函数,你的代码又可以精简了
- 为什么要用内插字符串代替string.format
- 如何让多个不同类型的后端网站用一个nginx进行反向代理实际场景分析
- 8天入门docker系列 —— 第八天 让程序跑在swarm集群上
- 8天入门docker系列 —— 第七天 让你的container实现跨主机访问
- 8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry
- 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
- 8天入门docker系列 —— 第四天 使用aspnetcore小案例熟悉端口映射和挂载目录
- 8天入门docker系列 —— 第三天 使用aspnetcore小案例熟悉对镜像的操控
- 8天入门docker系列 —— 第二天 通过一个aspnetcore程序加深对容器的理解
- 8天入门docker系列 —— 第一天 docker出现前的困惑和简单介绍
- jenkins + supervisor + ansible 实现netcore程序的多机一键部署
- netcore使用 jenkins + supervisor 实现standalone下多副本自动化发布
- 看看redis中那些好玩的module (sql on redis, bf/cf on redis)
- 使用docker-compose 一键部署你的分布式调用链跟踪框架skywalking
- netcore服务程序暴力退出导致的业务数据不一致的一种解决方案(优雅退出)
- 你需要知道的这几种 asp.net core 修改默认端口的方式
- 使用kibana可视化报表实时监控你的应用程序,从日志中找出问题,解决问题