PHP中的严格模式?

时间:2010-07-07 08:27:19

标签: php variables declaration

具有自动变量声明的其他语言(如Perl)具有严格模式。

通过激活此严格模式,需要变量声明,并且只要您尝试使用未声明的变量,Perl就会抛出错误。

PHP是否提供任何类似功能?

12 个答案:

答案 0 :(得分:65)

有点儿。您可以在error reporting中激活E_NOTICE级别。 (常量列表here。)

未声明变量的每个使用实例都将抛出E_NOTICE

E_STRICT错误livel也会抛出这些通知,以及有关如何优化代码的其他提示。

error_reporting(E_STRICT);

终止脚本

如果您真的很认真,并希望您的脚本终止而不是在遇到未声明的变量时输出通知,那么您可以构建custom error handler

仅处理其中包含“未定义变量”的NOTICE并将其他所有内容传递给默认PHP错误处理程序的工作示例:

<?php

error_reporting(E_STRICT);

function terminate_missing_variables($errno, $errstr, $errfile, $errline)
{                               
  if (($errno == E_NOTICE) and (strstr($errstr, "Undefined variable")))
   die ("$errstr in $errfile line $errline");

  return false; // Let the PHP error handler handle all the rest  
}

$old_error_handler = set_error_handler("terminate_missing_variables"); 

echo $test; // Will throw custom error

xxxx();  // Will throw standard PHP error

 ?>

答案 1 :(得分:38)

使用

error_reporting(-1);

显示每个可能的错误,包括E_STRICT,甚至在将来的PHP版本中添加新的级别和常量时也是如此。

Reference

答案 2 :(得分:4)

答案 3 :(得分:3)

是的,在脚本的开头键入error_reporting(E_STRICT|E_ALL);

答案 4 :(得分:2)

您可以查看error_reporting,也不要忘记设置display_errors。 请注意,有多个级别的错误报告。

答案 5 :(得分:1)

默认情况下, PHP 警告有关未声明的变量,您只需要将error reporting级别调高,这样您就会看到通知。请注意,因为在PHP中没有特殊的语法来声明变量,而只是通过赋值来声明一个变量,它只能在您尝试使用未声明变量的值时发出警告。与其他语言相反,“未声明变量的赋值”不存在,因此PHP无法在那里发出警告。

答案 6 :(得分:1)

使用

error_reporting(E_ALL);

在PHP代码的开头。 或者在php.ini文件中设置error_reporting设置,为所有PHP文件设置

答案 7 :(得分:1)

您可以使用set_error_handler()实现自己的错误处理功能。

然后您可以根据需要对某些错误级别做出反应。

例如,如果未正确声明变量或满足您不喜欢的任何条件,则可以终止脚本,而不是仅显示和记录错误消息。

这样,您就可以对PHP解释器实例上运行的任何代码强制执行非常严格的策略。

答案 8 :(得分:0)

是的,你通过错误报告来做到这一点。

http://www.php.net/manual/en/function.error-reporting.php

答案 9 :(得分:0)

我建议您在开发环境和实时生产环境(WWW,公司Intranet等)中报告和处理错误的要求不同。在开发过程中,您将希望尽可能详细地查找和修复问题。

在实时环境中,我认为您不希望向用户显示PHP错误消息,而是允许脚本继续使用缩减功能(例如,“抱歉我们目前无法更新您的个人资料” “,或将用户重定向到主页等)。实现这一目标的一种方法是通过使用每个环境的自定义错误处理程序

答案 10 :(得分:0)

2019年对这个老问题的回答,

是的,您可以从PHP 7.X开始,

declare(strict_types=1);

这将强制所有标量类型声明对类型严格。

但是,如果您全局启用此功能,则可能会影响其他依赖弱模式的第三方模块(例如Composer库),因此请确保在相关的类/文件中强制实施。

答案 11 :(得分:-1)

使用:

error_reporting(E_STRICT);

我认为您需要在上面进行尝试。