PHP异常处理与C#

时间:2010-10-26 01:14:47

标签: c# php error-handling

这是一个非常基本的问题(我希望)。我所做的大多数异常处理都是使用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#?

4 个答案:

答案 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的异常。”

另见http://www.php.net/manual/en/class.errorexception.php

答案 3 :(得分:1)

我认为在PHP中处理这个问题的唯一方法是写:

try
{ 
  if ($b == 0) throw new Exception('Division by zero.');
  $divByZero = $a / $b; 
} 
catch(Exception ex) 
{ 
  echo ex->getMessage(); 
} 

与C#不同,并非每个问题都会在PHP中引发异常。一些问题被默默地忽略(或者不是默默地 - 它们在输出中打印一些东西),但还有其他方法可以处理这些问题。我想这是因为从第一个版本开始,异常不是语言的一部分,所以有一些“遗留”机制。