2

当我设置error_reporting(E_ALL | E_STRICT);时,我的代码会产生Undefined variable错误。我可以解决它们,但我想知道编写通过严格检查的代码和E_STRICT关闭代码之间在速度或内存使用方面是否有任何差异?

4

3 回答 3

9

没有机械效益。但是,您可以避免做一些非常常见、非常愚蠢的事情,比如在使用变量之前并不总是初始化它——因为使用E_STRICTon,PHP 将产生错误,而不是允许函数以潜在的灾难性和可能不可见的方式中断。

例如,完全可以想象一个数据库支持的应用程序使用一个没有被所有可能的执行路径初始化的变量:

// Adds an allergy to the user's records
public function Add($AllergyID) {
    $Patient = $this->Patient->Load();

    if ($Patient->Insurance->StartDate < now()) {
          $Allergies = $Patient->Allergies->Get();
          $Allergies[] = $AllergyID;
    }

    $Patient->Allergies->Set($Allergies);
}

最终它没有被初始化,并且某人的病历表被静默截断。

简而言之,您应该始终带着所有警告进行开发:这是您的第一道防线。但是,当需要将代码投入生产时,您绝对希望关闭错误报告。您不希望恶意用户深入了解您的应用程序的内部运作,或者更糟的是您的数据库。

于 2012-08-23T06:17:46.327 回答
1

没有速度优势,但在使用 PHP 5.2.0 时。或在您应该使用 E_ALL | 之前 E_STRICT 用于开发目的。

但是对于 PHP 5.2.0 以上的 E_STRICT 是包含在 E_ALL 本身中的。

或者你可以使用 error_reporting(-1); 这将始终包括所有内容,即使它们存在于 E_ALL 中。

使用下面的 stackoverflow 问题以供进一步参考 什么是推荐的 error_reporting() 开发设置?E_STRICT 呢?

于 2012-08-23T06:34:53.083 回答
0

错误越少,速度越快;可维护性将增加;内存增强也可能,因为日志不会是flus

于 2012-08-23T06:21:26.933 回答