2013-02-11 71 views
0

如何处理PHP中的异常?作为一个例子,在这样的代码:这个PHP中的异常处理?

<?php 
    $a=5; 
    $b=0 
    $c=($a/$b); 
    echo $c; 
?> 

请帮助我。

+0

可能重复[PHP:例外与错误?](http://stackoverflow.com/questions/841500/php-exceptions-vs-errors)。确保你检查了所有答案。 – 2013-02-11 10:18:00

+0

默认情况下,这会引发警告而不是例外。 – Niko 2013-02-11 10:18:57

回答

1

PHP不会抛出异常而引发警告和错误消息,因此您无法在此处找到任何东西。但是,您可以修改此行为:

// Register a custom error handler that throws an ErrorException 
// whenever a warrning or error occurs 
set_error_handler(function ($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 
}); 

$a = 5; 
$b = 0; 

// Now a division by zero will result into an ErrorException being thrown 
try { 
    $c = $a/$b; 
    echo $c; 
} catch (ErrorException $e) { 
    echo 'Error: ' . $e->getMessage(); 
} 
+0

它的工作。但是如果你解释了set_error_handler(函数($ errno,$ errstr,$ errfile,$ errline){0},则抛出新的ErrorException($ errstr,0,$ errno,$ errfile,$ errline); });那么它会清除我的理解。谢谢。 – ripa 2013-02-11 10:47:47

+0

这会注册一个自定义错误处理程序 - 默认情况下,PHP会将错误消息记录或打印到屏幕上。通过注册一个自定义错误处理程序,您告诉PHP您希望以不同方式处理错误消息。 PHP然后调用错误处理程序而不是输出消息。在这种情况下,错误处理程序会引发异常,即将错误消息转换为异常。 – Niko 2013-02-11 16:01:13

-1

第一个:您正在第二行代码(它可以被零分割)进行分割。

第二个:由于抛出错误,不需要在方法中返回false。

第三:为什么在这里使用一个异常,而不仅仅是让你的方法在执行devision之前返回true和false。

第四:为什么有一个方法,如果你只需要检查$ y的值。调用方法或包含if语句只需要一行代码。

那么,为什么不能只是像:

case '/':     
    if($b > 0) 
     $prod = $a/$b; 
    break; 
0

据我所知PHP不会被零扔在分裂异常。我测试了5.3,它触发了一个警告,所有更小的版本。所以把它放在try块中不会做任何事情。您可以使用ErrorException类将PHP错误映射为Exceptions,并且可以使用错误和异常处理程序进行调试。请参阅https://github.com/sam-at-github/php_error_exceptions,以获取有关拧紧的参考实现。