Php 通过层重新抛出异常和状态代码的使用
我在这里也搜索了很长时间,阅读了很多php代码,但仍然找不到满意的答案。这似乎是一个太宽泛的话题,但它真的结合在一起——最终对我来说。你能帮忙吗 在php网站中,我将PDO作为DAL,BLL对象使用什么,它们从UI调用。现在,如果发生了什么事情,PDO将抛出一个PDO异常。当然,UI层不必知道任何关于PDO异常的信息,所以BLL对象会捕获它。但是现在呢 我已经读过了 例外情况适用于真正例外的情况和 其中一个重新抛出来自较低层的异常,以避免在较高层中获得低级异常。 让我举例说明我的问题,请不要注意函数args:Php 通过层重新抛出异常和状态代码的使用,php,exception-handling,error-code,Php,Exception Handling,Error Code,我在这里也搜索了很长时间,阅读了很多php代码,但仍然找不到满意的答案。这似乎是一个太宽泛的话题,但它真的结合在一起——最终对我来说。你能帮忙吗 在php网站中,我将PDO作为DAL,BLL对象使用什么,它们从UI调用。现在,如果发生了什么事情,PDO将抛出一个PDO异常。当然,UI层不必知道任何关于PDO异常的信息,所以BLL对象会捕获它。但是现在呢 我已经读过了 例外情况适用于真正例外的情况和 其中一个重新抛出来自较低层的异常,以避免在较高层中获得低级异常。 让我举例说明我的问题,请不要注意
class User
{
function signUp()
{
try
{
//executes a PDO query
//returns a code/flag/string hinting the status of the sign up:
//success, username taken, etc.
}
catch (PDOException $e)
{
//take the appropriate measure, e.g. a rollback
//DataAccessException gets all the information (e.g. message, stack
//trace) of PDOException, and maybe adds some other information too
//if not, it is like a "conversion" from PDOException to DAE
throw new DataAccessException();
}
}
}
//and in an upper layer
$user = new User();
try
{
$status = $user->signUp();
//display a message regarding the outcome of the operation
//if it was technically successful
}
catch (DataAccessException $e)
{
//a technical problem occurred
//log it, and display a friendly error message
//no other exception is thrown
}
这是一个正确的解决方案吗?
当重新抛出PDOException时,我认为使用异常链接是不合适的,因为这只会使调试信息冗余;DataAccessException获取所有内容,包括来自PDOException的完整堆栈跟踪
提前感谢。据我所知,你的帖子很好的资源是: 如果我能用这个短语,我想你已经完成了你的家庭作业,但是你忘了为什么要做这件事。在您的示例中,我将创建如下内容
SignUpException
这将通知上层,注册出现了问题。您在这里所做的基本上是用不同的命名异常来屏蔽数据库异常,这本质上是相同的,虽然编程上正确,但没有抓住为什么要这样做的要点。在我看来很好。只要你确定这一点;当您将PDO异常作为更一般的DAE异常重新抛出时,在转换过程中不会丢失任何调试信息。理想情况下,您应该将其作为在基本异常类中指定的第三个参数传递,这样它将被传递。谢谢您的回复!我考虑将传递PDOE的异常链接作为第三个参数,但与php.net示例相反,我真的看不出本例的意义:将有PDOE包含所有有用的调试信息,包装在另一个具有相同数据但来自上面一层的异常中。感谢您的回答!我很高兴我几乎完成了作业:-。你完全正确,我没抓住要点。我要去看视频,它看起来很有趣。