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

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

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

display_errors = Off

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

【问题讨论】:

标签: php warnings


【解决方案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 升级会破坏你的代码。应用这应该只是一个临时修复,直到您修复了错误。

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

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

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

    一个例子是

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2020-11-04
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      相关资源
      最近更新 更多