首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否应该在php代码中使用at符号(@

我是否应该在php代码中使用at符号(@
EN

Stack Overflow用户
提问于 2014-12-17 03:20:17
回答 2查看 202关注 0票数 1

我最近学会了如何在我的php代码中使用@符号,我已经学会了喜欢它。然而,我也被告知@在性能方面并不是很有效。它提供的优雅足以解释它可能会或可能不会造成的性能损失。

我实现的一种常见用法是在尝试访问数组时使用if语句。

代码语言:javascript
运行
复制
if( $value = @$array['key'] )
// value exists and we can access it

因为它返回null而不是显示错误,所以在这种情况下它是一个有用的工具。

EN

回答 2

Stack Overflow用户

发布于 2014-12-17 18:04:42

以这种方式抑制错误是有用的,但对于您的示例并不有用,因为有更传统的方法来检查这些潜在的错误。

我有时会使用它,但通常用于IO操作。例如。

代码语言:javascript
运行
复制
$sample = 'sample.txt';

if (!file_exists($sample)) {
    throw new FileNotFoundException($sample);
}

if (!$fp = @fopen('sample.txt', 'r')) {
    throw new IOException($sample, error_get_last()['message']);
}

其中的例外是我会创建的类。目标是打开一个文件进行读取,首先我需要检查文件是否存在,这很容易,如果不存在,我可以抛出一个相关的错误。

下一步是打开文件。好吧,这是一个空操作或全操作,可能有很多原因导致它不能工作(例如权限)。

如果有问题,我想处理这个问题(在本例中是通过捕获异常),所以我抑制了错误(因为我不想让用户看到它),但我确实想知道发生了什么,所以我捕获了异常,将消息记录在某个地方,并将用户重定向到其他地方。

我使用@是因为我不知道错误可能是什么,而且根据PHP配置的不同,无论您如何处理返回值,它总是会触发一个错误。

不要将它用于通过索引获取数组值之类的事情,因为这样做的问题类型很少,并且可以在开始操作之前检查所有问题。

票数 3
EN

Stack Overflow用户

发布于 2014-12-17 21:45:23

它影响性能的原因是,即使错误消息的生成被抑制,它仍然会触发PHP中的所有错误处理机制。如果禁用error_reporting()和error_logging(),也会出现同样的问题。

它确实提供了快速修复解决方案,但是您所描述的场景也可以通过以下方式实现:

代码语言:javascript
运行
复制
$value = isset($array['key']) ? $array['key'] : null;

而不会触发错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27525782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档