这是一个非常基本的问题(我希望)。我所做的大多数异常处理都是使用c#。在c#中,try catch块中出错的任何代码都由catch代码处理。例如
try
{
int divByZero=45/0;
}
catch(Exception ex)
{
errorCode.text=ex.message();
}
错误将显示在errorCode.text中。如果我尝试在php中运行相同的代码,那么:
try{
$divByZero=45/0;
}
catch(Exception ex)
{
echo ex->getMessage();
}
捕获代码未运行。根据我的理解,php需要一个抛出。这不是打败错误检查的全部目的吗?这不会减少尝试捕获到if then语句吗? if(除以零)抛出错误 请告诉我,我不必预测try中的每个可能的错误。如果我这样做,那么无论如何都要让php的错误处理更像c#?
答案 0 :(得分:6)
您还可以将set_error_handler()和ErrorException的所有错误转换为例外:
function exception_error_handler($errno, $errstr, $errfile, $errline )
{
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
try {
$a = 1 / 0;
} catch (ErrorException $e) {
echo $e->getMessage();
}
答案 1 :(得分:2)
PHP的try-catch后来在语言的生命中实现,因此它只适用于用户定义的异常。
如果你真的想要处理实际的错误,set your own error handler。
定义和捕获例外:
function oops($a)
{
if (!$a) {
throw new Exception('empty variable');
}
return "oops, $a";
}
try {
print oops($b);
} catch (Exception $e) {
print "Error occurred: " . $e->getMessage();
}
答案 2 :(得分:2)
来自http://php.net/manual/en/language.exceptions.php
“内部PHP函数主要使用错误报告,只有现代面向对象的扩展使用异常。但是,错误可以简单地转换为具有ErrorException的异常。”
答案 3 :(得分:1)
我认为在PHP中处理这个问题的唯一方法是写:
try
{
if ($b == 0) throw new Exception('Division by zero.');
$divByZero = $a / $b;
}
catch(Exception ex)
{
echo ex->getMessage();
}
与C#不同,并非每个问题都会在PHP中引发异常。一些问题被默默地忽略(或者不是默默地 - 它们在输出中打印一些东西),但还有其他方法可以处理这些问题。我想这是因为从第一个版本开始,异常不是语言的一部分,所以有一些“遗留”机制。