PHP处理业务逻辑错误。也许是设计模式?
有关于如何处理业务逻辑错误的提示吗?我不是说例外。 例如,假设我有一个类:PHP处理业务逻辑错误。也许是设计模式?,php,design-patterns,logic,Php,Design Patterns,Logic,有关于如何处理业务逻辑错误的提示吗?我不是说例外。 例如,假设我有一个类: <?php class Reactor () { // business class public function shutdown() { if($date > '2 pm') { // show error message to user echo 'you can't shutdown before 2 pm.'; }
<?php
class Reactor () { // business class
public function shutdown() {
if($date > '2 pm') {
// show error message to user
echo 'you can't shutdown before 2 pm.';
} else {
// error while trying to shutdown
throw new Exception('Oh my God, it is gonna blow!!');
}
}
}
?>
真正的问题是如何将错误消息传递给我的视图?
例外情况适用于例外情况。我非常接近于将ErroMessage和ErrorCode属性添加到基本业务类,并在每次调用业务类方法时进行检查 事实上,你在这条路上走对了。您可以在ErrorController中处理异常—Zend中建模的约定,但在许多其他框架中也是如此。如果你自己动手做的话,你可以自己创造 这个线程有一个更以Zend为中心的处理方法,但是您可以使用ErrorController来实际渲染视图。处理$e异常类的输入并从中获取消息 如果您深入DIY路线,那么如果您将较大的块包装在try/catch中并测试exception类的所有实例,则可以优雅地显示它。例如:
class Reactor () { // business class
public function shutdown() {
if($date > '2 pm') {
// show error message to user
echo "you can't shutdown before 2 pm.";
} else {
// error while trying to shutdown
throw new Exception('Oh my God, it is gonna blow!!');
}
}
}
//later, in the controller
$reactor = new Reactor();
try{
$reactor->shutdown('1pm');
} catch(Your_Custom_Exception $e){
//pass to view
$this->view($e->getMessage());
} catch(Exception $e){
// woops, serious error. do something useful
}
实际上,你在这条路上走对了。您可以在ErrorController中处理异常—Zend中建模的约定,但在许多其他框架中也是如此。如果你自己动手做的话,你可以自己创造 这个线程有一个更以Zend为中心的处理方法,但是您可以使用ErrorController来实际渲染视图。处理$e异常类的输入并从中获取消息 如果您深入DIY路线,那么如果您将较大的块包装在try/catch中并测试exception类的所有实例,则可以优雅地显示它。例如:
class Reactor () { // business class
public function shutdown() {
if($date > '2 pm') {
// show error message to user
echo "you can't shutdown before 2 pm.";
} else {
// error while trying to shutdown
throw new Exception('Oh my God, it is gonna blow!!');
}
}
}
//later, in the controller
$reactor = new Reactor();
try{
$reactor->shutdown('1pm');
} catch(Your_Custom_Exception $e){
//pass to view
$this->view($e->getMessage());
} catch(Exception $e){
// woops, serious error. do something useful
}
我想你应该吃这样的东西 使用属性存储数据和错误消息。我认为为if和else生成错误也是不合逻辑的
我想你应该吃这样的东西 使用属性存储数据和错误消息。我认为为if和else生成错误也是不合逻辑的
在这种情况下,例外情况正是您所需要的。状态验证—您正在执行的操作将导致沉默或异常。您应该在控制器中处理模型抛出的异常,将其转换为消息并将其传递给视图。异常正是您在这种情况下所需要的。状态验证—您正在执行的操作将导致沉默或异常。您应该在控制器中处理模型抛出的异常,将它们转换为消息并传递给视图。他也不会在if和else上生成错误。他是说else实际上应该尝试关闭,但过程中可能会出现错误。@Sebastian是不是说如果尝试关闭,他就不能生成错误,那么我将更新codeIs是我的理解,即业务错误不应该生成异常,因此,我试图避免为业务逻辑错误捕捉custon sxceptions。我想我将使用错误代码和错误消息。感谢所有人的帮助。@uacaman您会得到错误,例如:-10/0是无穷大,这是一个错误:-被零除。在这种情况下,您会得到像syantax错误这样的丑陋错误。在这种情况下,您应该使用try-catch生成异常。在业务逻辑中,您只允许一些操作,例如在2之前关机,而是生成逻辑错误消息。他也没有在if和else上生成错误。他是说else实际上应该尝试关闭,但过程中可能会出现错误。@Sebastian是不是说如果尝试关闭,他就不能生成错误,那么我将更新codeIs是我的理解,即业务错误不应该生成异常,因此,我试图避免为业务逻辑错误捕捉custon sxceptions。我想我将使用错误代码和错误消息。感谢所有人的帮助。@uacaman您会得到错误,例如:-10/0是无穷大,这是一个错误:-被零除。在这种情况下,您会得到像syantax错误这样的丑陋错误。在这种情况下,您应该使用try-catch生成异常。在业务逻辑中,您只允许一些操作,例如在2之前关机,而生成逻辑错误消息
public function shutdown() {
if($date > 2) {
$this->errorstatus = true;
$this->error['date'] = "You cannot shutdown before 2 pm";
} else
if($this->poweroff)
return true;
else
throw new Exception("ERROR WHILE SHUTTING DOWN"):
}
private function poweroff()
{
//if power off then return true
//else return false
}