具有自动变量声明的其他语言 - 比如Perl - 具有严格的模式。PHP中的严格模式?
通过激活这种严格模式,变量声明是必需的,只要您尝试使用未声明的变量,Perl就会抛出错误。
PHP提供任何类似的功能吗?
具有自动变量声明的其他语言 - 比如Perl - 具有严格的模式。PHP中的严格模式?
通过激活这种严格模式,变量声明是必需的,只要您尝试使用未声明的变量,Perl就会抛出错误。
PHP提供任何类似的功能吗?
的种类。您可以激活error reporting中的E_NOTICE
级别。 (常量列表here。)
每个使用未声明变量的实例都将引发一个E_NOTICE
。
E_STRICT
错误livel也会抛出这些通知,以及其他关于如何优化代码的提示。
error_reporting(E_STRICT);
终止脚本
如果你真的很严重,希望你的脚本终止而不是遇到一个未声明的变量时,只是输出的通知,你可以建立一个custom error handler。
,在他们只处理与“未定义的变量”的告示,并传递到默认的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
?>
是的,在脚本的开头键入error_reporting(E_STRICT|E_ALL);
。
只有在使用PHP 5.4.0之前,您需要明确指定'E_STRICT'。请参阅http://php.net/manual/en/function.error-reporting.php,其中'E_STRICT'自5.4.0起成为'E_ALL'的一部分。 – Roland 2017-10-27 13:01:16
只有一半回答。请参阅其他答案。 – Roland 2017-10-27 13:02:01
PHP 为警告大约在默认情况下未声明的变量,你只需要要打开error reporting级别,以便您可以看到通知。请注意,由于没有特别的语法来声明PHP中的变量,并且只需通过分配给它来声明一个变量,它只能在您尝试时使用未声明的变量的值来警告您。与其他语言相反,“未声明的变量赋值”不存在,所以PHP无法在那里提醒你。
使用
error_reporting(E_ALL);
在你的PHP代码的开始。 或在您的php.ini文件中设置error_reporting设置,为所有PHP文件设置它
您可以检查error_reporting
,并且不要忘记设置display_errors
以及。 请注意,有多个级别的错误报告。
您可以set_error_handler()
实现自己的错误处理功能。
然后,您可以根据需要对某些错误级别做出反应。
例如,如果未正确声明变量或遇到任何不满意的情况,您可以终止脚本,而不是仅显示和记录错误消息。
这样,您可以对在PHP解释器实例上运行的任何代码执行非常严格的策略。
我建议报告和处理错误的要求在您的开发环境和现场生产环境(WWW,公司内联网等)中有所不同。在开发过程中,您会希望尽可能详细地查看和修复问题。
在现场环境中,我认为不是想向用户显示PHP错误消息,而是允许脚本继续使用减少的功能(例如,“很抱歉,我们无法更新您的配置文件时刻“,或将用户重定向到主页等)。一个方法来实现这一点将通过使用自定义错误处理程序为每个环境
我在测试/开发阶段实现了Pekkas代码。 – jantimon 2010-07-07 13:27:26
几年后,PHP已获得declare(strict_types = 1);
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict
由于版本7 [PHP确实支持严格模式](http://php.net/manual/en/migration70.new-features.php),只是把'声明(strict_types = 1); '在每个(和每个)脚本文件的顶部,在命名空间声明之前。 – Code4R7 2017-05-23 09:05:57
@ Code4R7这是一种不同的严格模式,然后在问题中询问。 – Flimm 2017-07-03 16:59:58
是的。恢复为'error_reporting(E_STRICT);'。 – Code4R7 2017-07-04 09:03:03