我在用着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(使用前将#替换为@)