Possible Duplicate:
Reference - What does this symbol mean in PHP?
我正在制作一个 Web 应用程序,它使用 URL 查询来访问应用程序的不同部分。我一直在寻找一种解决方案,使无效查询(如 index.php?page=dashboarrrd
)显示错误 404 消息而不是 PHP 错误。
经过一些搜索,我发现我可以使用类似下面的东西来完成这项工作:
if(!@include($fileName)){
@include("pageData/404.php");
}
这是有道理的,但我不知道为什么会这样。我的意思是,include
之前的 @
到底是什么意思?我完全理解 include $filename;
但我需要解释 @include ($fileName)
您真正需要的代码是
$fileName = "pagedata/".basename($_GET['page']).".php";
if(is_readable($fileName)) {
include($fileName);
} else {
include("pagedata/404.php");
}
和@在这里完全没有关系
@是由于缺乏经验而产生的最大错觉之一。
使用它的人确实希望只有一种错误,而实际上可能有更多错误。堵住所有可能的信息,只压制其中一个,这绝对就像把 child 连同浴缸一起扔掉一样。
造成这种误解如此普遍的一个根本问题是:
大多数 PHP 用户无法区分错误控制的三个方面:
- 错误处理
- 错误报告
- 用户通知。
为了 [3] 的缘故,大部分时间人们都会混淆 (1) 和 (2)。虽然它们每个都需要单独处理:
- 您的程序不应出现故意错误。没有错误应该是程序逻辑的一部分。所有出现的错误都应该只是意外的错误。
如果您预计会出现错误,则必须处理。不是用@堵嘴,而是优雅地处理。 is_readable()
在我的代码中正是为此。
- 错误报告是给程序员的,应该总是在最大值。因此,应该在实时站点上启用错误日志记录,并且程序员必须检查所有发生的错误。当然,他会对此类错误感兴趣,因此 @ 在这里只会造成伤害。
- 用户级别的错误消息应该与系统错误消息不同。您的
404.php
是这种用户友好行为的一个很好的例子。至于系统错误消息,用户根本不应该看到它们。只需关闭 display_errors
并查看 - @ 又没用了!