2010-10-14 71 views
3

我有一个基于Zend Framwork的应用程序。在一个模型中,我从另一个模型调用方法。当我称这种方法时,我使用try-cath块来处理奇怪的情况。 Model1。每个应用程序错误抛出异常

try { 
    $result = Module_Model2_Name->method(); 
} catch (Exception $e) { 
    // Do Something 
} 

如果我们在try块中发现了一个throw,catch应该工作。但我不知道我的应用程序的行为。如果它是Model2方法中的一些应用程序错误,它应该抛出一个异常。 在模型2的方法,接下来我要做的事情,但它不工作:

set_error_handler(create_function('$m = "Error"','throw new Exception($m);'), E_ALL); 

我怎么能扔在每一个PHP应用程序错误的异常? 非常感谢。对不起我的英语不好。

+1

+1更正两个愚蠢的,原因不明的和不必要的downvotes。我真诚地希望他们不是英文的。 – Shabbyrobe 2010-10-14 12:56:26

+1

@Shabbyrobe我很确定他们是因为这个问题被正确回答了,而且OP用一个简单的“这不是答案”降低了显然正确的答案。如果那不是答案,那么这是一个非常糟糕的问题。当然OP现在已经接受了这个答案。 – 2010-10-14 14:10:22

+1

编辑以允许投票更改,因为OP已经接受了他低估的答案。 – 2010-10-14 14:22:18

回答

8

它看起来不错(测试它)。

<?php 
set_error_handler(create_function('$nr, $msg = "Error"','throw new Exception($m);'), E_ALL); 
try{ 
    foreach($notHere as $var){} 
} 
catch(Exception $e){ 
    var_dump($e); 
} 
?> 

请注意:

下列错误类型不能 与用户定义的函数来处理: E_ERROR,E_PARSE,E_CORE_ERROR, E_CORE_WARNING,E_COMPILE_ERROR, E_COMPILE_WARNING,大部分 E_STRICT在 set_error_handler()被调用的文件中引发。

取自PHP手册。

+0

-1。这不是一个答案。我知道手册的这一部分。这对我没有帮助。 – pltvs 2010-10-14 12:32:55

+0

请解释一下你想做什么?这个例子很好。每次PHP错误发生时,PHP都会引发异常。 – donis 2010-10-14 12:35:21

+1

请原谅赦免?你还需要什么?你问:*我如何在每个PHP应用程序错误上抛出一个异常?*并且我给了你一个代码片断。我还指出,通过给出手册中的引用,某些错误不能通过错误处理程序捕获。 – 2010-10-14 12:37:38

4

我的版本:

function custom_error_handler($errno, $errstr, $errfile, $errline, $errcontext) 
{ 
    $constants = get_defined_constants(1); 

    $eName = 'Unknown error type'; 
    foreach ($constants['Core'] as $key => $value) { 
     if (substr($key, 0, 2) == 'E_' && $errno == $value) { 
      $eName = $key; 
      break; 
     } 
    } 

    $msg = $eName . ': ' . $errstr . ' in ' . $errfile . ', line ' . $errline; 

    throw new Exception($msg); 
} 

set_error_handler('custom_error_handler', E_ALL); 
+0

谢谢。它工作的很好。 – pltvs 2010-10-15 06:55:53