2017-03-03 68 views
0

我是新来的例外,所以我想学习它。处理期望catch块 - xdebug

我现在已经累的第一件事是复制粘贴从php.net文档代码:

function inverse($x) { 
    if (!$x) { 
     throw new Exception('Division by zero.'); 
    } 
    return 1/$x; 
} 

try { 
    echo inverse(5) . "\n"; 
    echo inverse(0) . "\n"; 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

// Continue execution 
echo "Hello World\n"; 

文件说,输出将是:

0.2 
Caught exception: Division by zero. 
Hello World 

我预计输出,因为据我所知,这是异常处理的重点,不会显示带有跟踪的丑陋的大错误代码。

相反,这个输出我已经得到的:

0.2 
(!) Exception: Division by zero. in D:\Apache\htdocs\SO\index.php on line 10 
Call Stack 
# Time Memory Function Location 
1 0.0005 363040 {main}() ...\index.php:0 
2 0.0009 363584 inverse() ...\index.php:17 
Caught exception: Division by zero. Hello World 

为什么我会收到这个错误?我正在使用xDebug,这可能是这个原因吗?如果是,我该怎么做programmaticaly不会得到这个错误,但什么PHP文件写道。

UPDATE:

如果我加入它工作正常tryxdebug_disable();,并得到预期的输出。

我原来的问题转向:如何处理异常,并在xdebug启用时不显示这个丑陋的错误?

+0

我刚在这里检查你的代码:https://eval.in/746991 – C2486

+0

@Niklesh是的,我明白了。我已经更新了我的问题。 – vaso123

+0

我不认为它的丑陋,它更详细的错误查看您安装'xdebug' – C2486

回答

0

如果你不想永久性的,你可以卸载该扩展。 要禁用特定区域,请检查扩展extension_loaded,并像这样禁用。

if (extension_loaded('xdebug')) { 
    xdebug_disable(); 
} 
+0

它不会卸载扩展名,只是不显示错误。我读过文档:“禁止在错误条件下显示堆栈跟踪”https://xdebug.org/docs/all_functions这应该是我检查的第一件事情,即文档。对不起,截止日期是今天。 – vaso123

+0

是'extension_loaded'只检查是否安装。 – C2486

+0

是的,但extension_load与我悲伤无关。我谈到了'xdebug_disable'的行为;'这只是关闭错误,没有别的。 – vaso123