imliam / php-catch-exit
优雅地处理不想要的退出语句。
Requires
- php: ^7.1
This package is auto-updated.
Last update: 2024-08-29 04:57:26 UTC
README
优雅地处理不想要的退出语句。
🤔 常见问题解答
为什么你需要这个?
实际上,这根本不需要。在现代化的PHP应用程序中,几乎没有任何实际的理由要在exit
语句和异常之间进行选择,因为所有框架都有自己的优秀、可扩展的异常处理器,应该充分利用。
话虽如此,许多初学者PHP教程最终都会展示类似的首次数据库连接代码
<?php $db = mysql_connect(...) or die('Could not connect.');
幸运的是,这已经成为过去的事情了,但遗憾的是,这种做法似乎仍然有人在用。在过去几年里,我偶尔还是会遇到在发生错误时仍然使用exit
和die
语句的Composer包。
应该完全避免这些包 - 或者更好的做法是,在它们出现时进行分支或提交拉取请求。
那么为什么要这样做呢?
这个包/函数更像是一个证明概念,展示了如何处理这些情况,而不是一个严肃的建议,说明如何继续使用它们。
💾 安装
您可以使用以下命令使用Composer安装该包
composer require imliam/php-catch-exit:^1.0.0
📝 使用
如果您之前编写过基本的退出语句,您会理解,如果在那个点输出缓冲区为空,您将在浏览器中看到一个空白白色屏幕,上面显示的是传递给该语句的文本。
exit('Something went wrong.');
此包添加了一个辅助函数,它将接受一个闭包作为第一个参数。这个闭包是您可以添加任何预期可能会抛出退出语句的代码的地方 - 就像try-catch语句中的try块一样。
假设没有发生退出,您可以从这个闭包中返回一个值,并像平常一样继续应用程序。
$var = catch_exit(function() { return "It's all okay."; }, ...); echo $var; // "It's all okay."
打印字符串
该函数的第二个参数可以接受一个字符串,如果闭包中的第一个参数发生早期退出,则将其输出到缓冲区。
这让您可以选择显示什么,而不是可能无法控制的内容。
catch_exit(function() { exit('Uh-oh!'); }, 'Something went wrong.'); // 'Something went wrong.' is displayed
您还可以使用此功能渲染一个视图,以便在发生这种情况时向用户显示。
执行闭包
然而,第二个参数也可以是另一个闭包,它仅当第一个闭包中发生早期退出时才会执行。它还将提供对当前输出缓冲区的访问权限
在这里,您可以优雅地处理应用程序的关闭方式。您可能想要执行一些操作,例如
- 记录发生的错误
- 向会话中发送消息,通知用户发生了什么
- 向用户渲染错误页面
- 将用户重定向回上一页
catch_exit(function() { exit('Uh-oh, something went wrong!'); }, function($message) { Log::error("The application exited with the following message: '{$message}'"); return View::make('errors.500') ->with('error', 'An unexpected error occurred.'); });
这也可以用来处理致命错误,例如当尝试实例化不存在的类或请求超过PHP的最大执行时间时。
catch_exit(function() { new ClassThatDoesNotExist(); }, function($message) { // ... });
🔖 变更日志
请参阅变更日志文件以获取有关最近更改的更多信息。
⬆️ 升级
请参阅升级文件以获取有关从先前版本升级的详细信息。
🎉 贡献
请参阅贡献文件和行为准则,了解如何为项目做出贡献的详细信息。
🔒 安全性
如果您发现任何安全相关的问题,请发送电子邮件至liam@liamhammett.com,而不是使用问题跟踪器。
👷 贡献者
♻️ 许可证
MIT许可证(MIT)。请参阅许可文件以获取更多信息。