Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用户友好的php try-catch_Php_Try Catch - Fatal编程技术网

用户友好的php try-catch

用户友好的php try-catch,php,try-catch,Php,Try Catch,因为很短的一段时间内,我正在使用PHP中的Try-Catch。现在,每次抛出一个新错误,屏幕上就会出现一个致命错误,这对用户来说并不友好,所以我想知道是否有一种方法可以给用户一个像回声一样的好消息,而不是致命错误 这是我现在拥有的代码: public static function forceNumber($int){ if(is_numeric($int)){ return $int; } else { throw new TypeEnforcerExc

因为很短的一段时间内,我正在使用PHP中的Try-Catch。现在,每次抛出一个新错误,屏幕上就会出现一个致命错误,这对用户来说并不友好,所以我想知道是否有一种方法可以给用户一个像回声一样的好消息,而不是致命错误

这是我现在拥有的代码:

public static function forceNumber($int){
    if(is_numeric($int)){
        return $int;
} else {
        throw new TypeEnforcerException($int.' must be a number');
}
}

public function setStatus($status) {
    try {
        $this->status = TypeEnforcer::forceInt($status); 
    } catch (TypeEnforcerException $e) {
        throw new Exception($e->getMessage());
    } catch (Exception $e) {
        throw new Exception($e->getMessage());
    }

}

最好使用能够捕获所有未锁定异常的前端控制器来解决此问题:

<?php
require('bootstrap.php');

try {
    $controllerService->execute($request);
} catch (Exception $e) {
    $controllerService->handleControllerException($e);
}
这实际上会强制使用整数。如果无法执行强制转换,例如$int,则完全不兼容的PHP将为您抛出异常


这个例子有点冒进,因为根据方法的名称,您使用它来验证某个数字,并提供一个错误(如果不是错误的话)以及一个异常。相反,您应该进行一些验证。如果您希望输入错误,那么当提供错误输入时,这不是一种例外情况,因此我不会为此使用异常。

这最好使用能够捕获所有未锁定异常的前端控制器来解决:

<?php
require('bootstrap.php');

try {
    $controllerService->execute($request);
} catch (Exception $e) {
    $controllerService->handleControllerException($e);
}
这实际上会强制使用整数。如果无法执行强制转换,例如$int,则完全不兼容的PHP将为您抛出异常



这个例子有点冒进,因为根据方法的名称,您使用它来验证某个数字,并提供一个错误(如果不是错误的话)以及一个异常。相反,您应该进行一些验证。如果您期望错误的输入,那么当提供错误的输入时,这不是一个例外情况,因此我不会为此使用异常。

如果没有办法,那么就没有try-catch块的意义。这就是它的实际用途。您可能会解释如何…?是的,共享一些您已经尝试过的代码。但是,如果您有语法错误生成致命错误,那么这与异常处理无关。您的代码甚至不会执行。所以这些问题需要首先解决,是的,你可以禁用屏幕上的错误显示,并将其记录在背景中。我真的不明白你的意思。try-catch的用途是,一旦try失败,它就会停止异常,因此用户必须看到他做错了什么,例如,状态可能只包含一个数字,如果他们填写字符串,则必须告知。如果没有办法,那么try-catch块就没有意义。这就是它的实际用途。您可能会解释如何…?是的,共享一些您已经尝试过的代码。但是,如果您有语法错误生成致命错误,那么这与异常处理无关。您的代码甚至不会执行。所以这些问题需要首先解决,是的,你可以禁用屏幕上的错误显示,并将其记录在背景中。我真的不明白你的意思。try-catch的用途是,一旦try失败,它就会停止异常,因此用户必须看到他做错了什么,例如,如果他们填写了一个字符串,那么状态可能只包含一个数字,必须告知。我还想对发送给用户的正常错误消息使用异常是。他们必须知道自己做错了什么,如果我有一个名字字段,他们填写的太长,太短,等等,那么他们必须得到一条消息,名字是短/长。我认为也可以使用例外来解决这个问题。@NickAudenaerde:这不是例外。这是一些验证层返回的消息,以便您可以将消息放入输出中。这通常是在某个请求/表单验证层中完成的。在较低级别的函数中,如果需要,则抛出真正的异常。请记住,一个请求可能有多条错误消息,但只有一个异常。@NickAudenaerde我不确定这就是异常设计的原因。@NickAudenaerde:我还更新了答案,向您展示了我通常在PHP的低级函数中使用的强制转换。@hakre,当第一行抛出异常时,您的模型不是失败了吗?我想将异常也用于发送给用户的正常错误消息是的。他们必须知道自己做错了什么,如果我有一个名字字段,他们填写的太长,太短,等等,那么他们必须得到一条消息,名字是短/长。我认为也可以使用例外来解决这个问题。@NickAudenaerde:这不是例外。这是一些验证层返回的消息,以便您可以将消息放入输出中。这通常是在某个请求/表单验证层中完成的。在较低级别的函数中,如果需要,则抛出真正的异常。请记住,一个请求可能有多条错误消息,但只有一个异常。@NickAudenaerde我不确定这就是异常设计的原因。@NickAudenaerde:我还更新了答案,向您展示了我通常在PHP的低级函数中使用的强制转换。@hakre,当第一行抛出异常时,您的模型不是失败了吗?