仅对部分代码禁用 PHP 警告

Posted

技术标签:

【中文标题】仅对部分代码禁用 PHP 警告【英文标题】:Disable PHP Warnings for only PART OF the code 【发布时间】:2018-01-22 03:40:24 【问题描述】:

为了禁用 php 警告,您需要在 php.ini 中设置以下参数

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = On

display_errors = Off

上述方法将为整个项目禁用警告。有没有办法仅对一段 php 代码禁用警告,即禁用某些函数或几行代码的警告?

【问题讨论】:

你为什么要这样做呢?这是个坏主意。请改正错误。 因为它们是警告而不是错误 Remove warning messages in PHP的可能重复 类似问题***.com/questions/1987579/… @Bhautik 你能删除你的评论并支持我的评论吗?同样的问题,呵呵! 【参考方案1】:

Yes,但是...

理想情况下,您希望修复这些错误(或至少以正确的方式处理它们),因为它看起来像是糟糕的设计,但您正在寻找的是错误控制运算符 (@)。

<?php
/* Intentional file error */
$my_file = @file('non_existent_file') or die("Failed opening file: error was '$php_errormsg'");

// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?>

注意:@-运算符仅适用于表达式。一个简单的经验法则是:如果您可以获取某物的值,则可以在其前面加上 @ 运算符。例如,您可以将其添加到变量、函数和包含调用、常量等之前。您不能将其添加到函数或类定义或条件结构(例如 if 和 foreach 等)之前。

注意...

警告:目前,“@”错误控制运算符前缀甚至会禁用对将终止脚本执行的严重错误的错误报告。除其他外,这意味着如果您使用“@”来抑制某个函数的错误,并且该函数不可用或输入错误,则脚本将在那里死掉,而没有说明原因。

【讨论】:

【参考方案2】:

首先 - 抑制 E_DEPRECATEDE_STRICT 似乎不是一个好的解决方案 - 下一次 PHP 升级会破坏你的代码。应用这应该只是一个临时修复,直到您修复了错误。

您有多个选项来抑制错误/警告。

    使用@-operator 抑制单个语句的错误。可以这样使用:$content = @file_get_contents('some-url-which-is-maybe-not-available..');

    抑制错误,直到您想用error_reporting 恢复它。这样做就像设置其他 ini 值一样。

一个例子是

$oldlevel = error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
// some code ...
// revert it
error_reporting($oldlevel);

您应该记住,您不能删除文件几行的编译时间/解析器错误/警告。这只能应用于整个文件,如果您在包含之前更改错误级别。

【讨论】:

以上是关于仅对部分代码禁用 PHP 警告的主要内容,如果未能解决你的问题,请参考以下文章

在源代码中部分禁用 gcc 中的迂腐警告

是否可以仅对部分用户启用电子邮件验证?

我的代码的哪一部分给了我警告? [复制]

PHP 5.4:禁用警告“从空值创建默认对象”

在coffeelint如何禁用“类的名字应该UpperCamelCased”的警告?

冒泡排序仅对数组的一部分进行排序