PHP simplexml_load_file()这需要一个@前缀

时间:2012-01-18 18:32:28

标签: php

我正在处理以前的开发人员代码,并且他的许多代码隐藏了@

的错误

一个例子是:

if(!file_exists($filename)) 
    throw new Exception("file '$filename' does not exist.");

$xmlObject = @simplexml_load_file($filename);       
if($xmlObject === false) 
    throw new Exception("Could not load '$filename' check syntax and file has read permission.");

我理解使用@隐藏错误但是这是好习惯还是不好?

3 个答案:

答案 0 :(得分:2)

只要其他错误捕获到位,例如在上面的示例中,使用@是可以接受的,因为它隐藏了PHP的标准错误输出。

然而,使用@来隐藏错误但却无所作为来补救它们被认为是不好的做法。

答案 1 :(得分:1)

这很糟糕。你应该经常检查以确保一切都是合法的。开发好的干净代码可以让您在出现问题时识别问题。通过使用@它将抑制那些可能完全由其他东西引起的错误。你永远不会知道,故障排除变得更加困难。

以上面的例子为例。

$xmlObject = @simplexml_load_file($filename);

那个人已经在检查文件是否存在。您可以删除该@符号并使用try catch块进行更改。

Try {
  $xmlObject = simplexml_load_file($filename);
catch....

答案 2 :(得分:0)

很糟糕。

首先开发代码。然后你开始测试它,如果有什么问题,你想通过看错来知道出了什么问题。所以你不想隐藏它们。

如果您已经处于开发和调试状态并希望将其置于在线状态,则必须关闭错误。这可以通过以下方式完成:

<?php
ini_set('display_errors', 'Off');
error_reporting( null );
?>

用户现在不会看到任何错误。更好的是在.htaccess文件中添加它:

# Turn off the errors
php_flag display_startup_errors off
php_flag display_errors off

然后错误已经隐藏,因此不需要@

我不记得你想要隐藏错误的状态。