我可以像这样使用 try-catch-finally 吗?

2024-03-18

我在用着try-catch多年来,但我从未学会如何以及何时使用finally,因为我从来不明白这一点finally(我读过坏书)?

我想问你关于使用finally就我而言。

我的代码示例应该解释一切:

$s = "";

$c = MyClassForFileHandling::getInstance();

try
{
    $s = $c->get_file_content($path);
}

catch FileNotFoundExeption
{
    $c->create_file($path, "text for new file");
}

finally
{
    $s = $c->get_file_content($path);
}

这是finally的正确用法吗?

更精确的问题:

我可以用吗finally(在未来的 PHP 版本或其他语言中)用于处理“如果不存在则创建”操作?


最后将始终被执行,因此在这种情况下,这不是其预期目的,因为正常执行将再次重新打开文件。如果您这样做,您打算做的事情将以相同(更干净)的方式实现

$s = "";

$c = MyClassForFileHandling::getInstance();

try
{
    $s = $c->get_file_content($path);
}
catch(FileNotFoundExeption $e)
{
    $c->create_file($path, "text for new file");
    $s = $c->get_file_content($path);
}

然后手册上说:

为了之前没有遇到过finally块的人的利益,它们与try/catch块后面的普通代码之间的主要区别在于,即使try/catch块将控制权返回给调用函数,它们也会被执行。

如果出现以下情况,它可能会这样做:

  • 如果您的 try 块包含您未捕获的异常类型,则代码
  • 你在 catch 块中抛出另一个异常
  • 你的 try 或 catch 块调用返回

最后在这种情况下会很有用:

function my_get_file_content($path)
{
    try
    {
        return $c->get_file_content($path);
    }
    catch(FileNotFoundExeption $e)
    {
        $c->create_file($path, "text for new file");
        return $c->get_file_content($path);
    }
    finally
    {
        $c->close_file_handler();
    }
}

=> 如果您需要确保在这种情况下关闭文件处理程序或一般的某些资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以像这样使用 try-catch-finally 吗? 的相关文章

  • PHP:检测USB设备

    我正在尝试使用 PHP 将用户名和密码存储到 USB 拇指驱动器上的文本文件中 因此 当用户返回使用 USB 密钥登录时 应该会打开一个弹出窗口 并提示输入用户名和密码 所以我的问题是如何使用 PHP 检测 USB 拇指驱动器 所以客户端或
  • 在 Woocommerce 商店页面中显示可变产品的默认变化价格

    I m wondering how I can display the product price on the shop page Right now my variable products are shown with their p
  • 在php中将数组写入文件并获取数据

    我有一个数组 使用后如下所示print r Array 0 gt Array 0 gt piklu name gt piklu 1 gt Array 0 gt arindam name gt arindam 2 gt Array 0 gt
  • 向 tk103 GPS 跟踪器发送命令

    我正在使用 php 开发实时 GPS 跟踪器 Web 应用程序 跟踪器参考号是tk103 我可以从跟踪器接收信息并将其存储到数据库中 设备的 GPRS 模式已启用 我的问题是 如何使用 php ini 将命令从服务器发送到设备 提前致谢 这
  • 如何测试“If-Modified-Since”HTTP 标头支持

    使用 PHP 如何准确测试远程网站supports If Modified Since HTTP 标头 据我所知 如果您获取的远程文件自标头请求中指定的日期以来已被修改 它应该返回 200 OK 状态 如果尚未修改 则应返回 304 Not
  • 如何使用 php 创建谷歌双因素身份验证?

    我想在我的 PHP 项目中使用 Google 2FA 用户登录时需要输入6位2fa代码 您可以画出一些关于该朝哪个方向走的提示吗 步骤 1 创建长度为 16 个字符的唯一密码 PHPGangsta 为 Google Authenticato
  • Netbeans 8 和 xdebug 非常非常慢

    我读过有关此问题的其他帖子 但我无法在本地 Web 服务器 Windows 7 上的 apache 2 4 9 php 5 5 12 上使用 xdebug 2 2 5 和 netbeans 8 0 1 获得令人满意的性能 有些页面加载时间超
  • MySQL JSON 存储与两个表

    与使用单独的元表相比 使用 JSON 在表中存储数据有什么好处吗 这是原始架构 Users Table UserId Username Etc 5 John Avatar Table Id UserId ImageName ImageTyp
  • Laravel 所有会话 ID 与 Redis 驱动程序

    在我的应用程序中 我希望允许某些用户能够注销除他 她之外的所有其他用户 当会话驱动程序设置为文件时 我已经完成了此功能 但现在我使用 redis 作为会话驱动程序 并且我无法找到任何方法来列出所有当前会话 就像我在文件时所做的那样司机 问题
  • 下拉 Ajax onchange SonataAdminBundle Symfony2 问题

    我正在尝试在 SonataAdminBundle 中实现 onchange 下拉菜单 我的实体就像 class BuilderHomePage var integer ORM Column name id type integer null
  • PHP 在 IIS7 上未报告任何错误

    我正在使用我们的 XAMPP 设置作为测试服务器来开发 PHP 应用程序 一旦应用程序准备好部署 我必须将其上传到客户端的服务器 问题是客户端的服务器正在运行 IIS 7 每次出现 PHP 错误时 它只会显示一个空白页面 现在 我的应用程序
  • 选择早于的时间戳

    我如何从数据库中选择超过 12 小时的项目 我使用时间戳列来存储时间 但我认为我不需要年 月 日 只需要小时 我有类似的东西 但它不起作用 没有错误 只是从表中返回所有数据 sql SELECT FROM Y WHERE X and tim
  • 比较 PHP 中的 unix 时间戳 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在 PHP 中我有 diff abs
  • 为什么 opcache 没有刷新?

    我用guzzlehttp guzzle封装在拉拉维尔 8 升级到后PHP 8 I get Symfony Component ErrorHandler Error FatalError Invalid opcode 117 2 0 in f
  • Laravel 5.2 如何更新迁移而不丢失数据

    我使用的是 laravel 5 2 我通常会根据项目要求更新数据库 所以我希望在不丢失数据库记录的情况下执行此操作 我的意思不是如何为我的数据库播种 我的意思是当我的数据库处于活动状态并且我想更新它时抛出 laravel 迁移 我正要扔La
  • 根据 WooCommerce 中的特定付款方式添加费用

    在 WooCommerce 中 我需要为特定支付网关申请自定义手续费 我这里有这段代码 如何向 WooCommerce Checkout 添加手续费 http www endocreative com add handling fee wo
  • 解析 PHP 多维数组

    这里 下面给出 是我正在做的一些非常简单的 php 解析多维数组的事情 我只是搜索 突出显示 键 然后将一些键值对存储在另一个数组中 有没有更好的方法来实现这一点 我的意思是关于性能 而不是有 n 个 foreach 循环来达到你想要的效果
  • PHP 中可以动态添加数据成员吗?

    我想知道是否可以在 PHP 运行时添加新的类数据成员 Yes prop newname obj gt prop 42 会做同样的事情 obj gt newname 42 如果 obj 尚不存在 则任一者都会将 newname 添加为属性
  • 如何捕获生成器抛出的异常并恢复迭代?

    我有一个生成器 它将值的集合传递给方法并生成结果 调用的方法可能会返回异常 发生这种情况时 我希望异常转到调用生成器来处理异常的代码 然后继续循环生成器 为了说明这一点 下面是一个生成器的示例 它将产生1 抛出一个 Exception 然后
  • Google Analytics PHP(发送信息)

    大意 我正在开发一个项目 我需要使用 Google Analytics 服务器端 我不需要检索信息 但我需要发送信息 我最终可以发送 js 脚本客户端 但在这种情况下它不是一个选项 以下大多数链接都非常旧 2012年 检索 不是我需要的 我

随机推荐

  • 使用D3读取csv返回html而不是csv数据

    我在脚本标签中有以下 d3 代码 d3 csv data csv function error data data forEach function d console log data 0 d date parseDate d date
  • 设置 UIView 的框架不起作用

    我在 iOS 7 中遇到了框架属性的问题 我想调整一些 UIView 的大小viewDidLoad 我的方法UIViewController 但如果我这样做int screenHeight UIScreen mainScreen bound
  • 有没有办法检测手机上是否有硬件键盘?

    我见过其他问题 例如硬件键盘事件 https stackoverflow com questions 4883168 hardware keyboard event 但Mango 没见过这个 有什么方法可以查出手机是否有硬件键盘 Use t
  • Firebase Firestore 查询得到一个结果

    我正在寻找最好的方法 1 查询单个结果 或者2 从查询中提取第一个结果 tried collection 0 and collection pop or collection shift 没有任何作用 我真的不喜欢我正在使用的代码 但它有效
  • 使用 JOGL 进行全屏摆动

    我正在尝试制作一个全屏呈现的 Swing 应用程序 遵循此处的描述http download oracle com javase tutorial extra fullscreen exclusivemode html http downl
  • 错误:没有匹配的函数可供调用

    我想在另一个类中使用另一个类的方法 但出现以下错误 问题是什么 TIA 错误 没有匹配的函数可用于调用 PositionInfo PositionInfo 这是我的代码 PositionInfo Pos double metr Pos Ge
  • 如何设置图片的大小?

    I have 飞溅 png并希望该图像全部出现在屏幕上 就像fitXY for ImageView 飞溅 png尺寸为 480x767 我必须在代码中更改什么 public class BitmapConfigView extends Li
  • PHP 中 $variable->something 的故事是什么?

    我见过这种方法被广泛使用 尤其是在 SimpleXML 中 Is this row gt unixtime 和这样做一样吗 row unixtime 这叫什么 为什么 如何使用它 使用 PHP 进行面向对象编程 https stackove
  • 使用 REST API 通过 PHP 连接到 VCenter 身份验证错误

    我按照官方 vSphere 站点中的说明从服务器和答案中获取信息这里的另一个用户 https stackoverflow com a 49324757 12013253 据我了解 首先我必须获取会话id cis id 但结果我得到 null
  • Django 模板扩展和 CSS

    我有这样的基本模板 当我刷新页面时 此文本会记录在日志中 01 Dec 2011 18 22 00 GET search HTTP 1 1 200 2760 01 Dec 2011 18 22 00 GET static style css
  • 关闭并打开新窗口后,SSH 密钥在 git bash 上不起作用

    使用以下链接创建 ssh 密钥 https help github com articles generate a new ssh key and adding it to the ssh agent https help github c
  • 逻辑右移、算术右移、循环右移的区别

    我一直在阅读经典的 黑客之乐 但我很难理解逻辑右移 算术右移和右旋转之间的区别 如果疑问看起来太简单 请原谅 首先记住机器字的大小是固定的 说 4 您的输入是 a b c d 然后将所有内容向左推一位即可得到 b c d X 问题 X 应该
  • 在javascript中调用java方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试在 javascript 中调用 java 方法 java类驻留在服务器端 示例 Java 代码是 public class
  • 按类前缀定位元素

    假设我有以下元素 div class home div class tab231891230 div div class tab121232441 div div class tab123134545 div div 如何使用 jQuery
  • 查找二维 numpy 数组中的共同元素

    如果我有两个 或更多 二维数组 如何在给定行号的情况下仅获取数组之间的公共元素 例如 我有以下格式的数组 time position velocity acceleration 我想让两个数组只具有相同的时间元素 所以第 0 行 我可以使用
  • 使用 wmi win32 类检查可用端口?

    我正在使用 inno setup 来制作安装文件 它需要提取本地 IP 地址 我可以通过查询 Win32 NetworkAdapterConfiguration 来完成 并检查特定端口是否打开以供软件运行 我目前正在寻找答案 我意识到 WM
  • 将我的 ASP.NET MVC 页面另存为 pdf

    如何将 ASP NET MVC 页面保存为 PDF 有第三方库可以为您提供非常好的保真度 我写这个帖子 http blog muhimbi com 2010 08 convert sharepoint html pages to pdf h
  • 程序集 - 无法设置断点 lldb

    我用这些选项组装了nasm O0 g f macho64但 lldb 抱怨 无法将断点解析到任何实际位置 当我尝试在文件中的行号处设置任何断点时 我已经开始尝试学习 OS X 的 64 位汇编 但到目前为止这确实是一个挑战 似乎几乎没有任何
  • Python绘图图像保存错误

    我是Python新手 我已经使用 Django 编写了 Web 服务来将图像保存在服务器中 我正在尝试使用下面的代码将绘图保存为图像 并且它可以正常工作 3 次 之后 Python 会抛出错误 如何解决这个问题 Exception igno
  • 我可以像这样使用 try-catch-finally 吗?

    我在用着try catch多年来 但我从未学会如何以及何时使用finally 因为我从来不明白这一点finally 我读过坏书 我想问你关于使用finally就我而言 我的代码示例应该解释一切 s c MyClassForFileHandl