PHP相当于Perl的'use strict'(要求变量在使用前初始化)

时间:2008-09-18 11:16:11

标签: php

Python的约定是变量是通过第一次赋值创建的,并且在分配一个变量之前尝试读取它们的值会引发异常。相比之下,PHP在读取时会隐式创建一个变量,并带有空值。这意味着在PHP中很容易做到这一点:

function mymodule_important_calculation() {
    $result = /* ... long and complex calculation ... */;
    return $resukt;
}

此函数始终返回null,如果null是functuion的有效值,则bug可能会在一段时间内未被检测到。 Python等价物会抱怨变量resukt在被分配之前被使用。

那么......有没有办法通过变量赋值来配置PHP更严格?

7 个答案:

答案 0 :(得分:10)

PHP 在解析时没有做太多的事情检查。

你能做的最好的事情就是提高你的警告水平来报告你的错误,但是当你得到一个E_NOTICE时,它太晚了,而且不可能提前强制E_NOTICES发生。

许多人正在携带“error_reporting E_STRICT”标志,但它仍然是追溯性警告,并且不会保护您免受您发布的错误代码错误。

这个宝石出现在本周的php-dev邮件列表中,我认为它只是你想要的工具。它更像是一个lint-checker,但它增加了当前lint检查PHP的范围。

PHP-Initialized Google Project

希望通过一些关注,我们可以在PHP本身中实现这种行为。所以把你的2美分放在PHP邮件列表/ bug系统/功能请求上,看看我们是否可以鼓励它的集成。

答案 1 :(得分:4)

据我所知,没有办法让它失败,但是在error_reporting设置中使用E_NOTICE可以让它发出警告(好吧,通知:-)但是仍然是一个你可以搜索的字符串。)

答案 2 :(得分:1)

查看错误报告http://php.net/manual/en/function.error-reporting.php

你想要的可能是E_STRICT。请记住,PHP没有名称空间,错误报告变得全局化。如果您使用未启用错误报告的开发人员使用第三方库,那将会很糟糕。

答案 3 :(得分:0)

我很确定如果先前未声明变量,它会生成错误。如果您的安装没有显示此类错误,请检查php.ini文件中的error_reporting()级别。

答案 4 :(得分:0)

您可以尝试使用此处指示的错误报告级别:http://us3.php.net/error_reporting但我不确定它是否提及非启动变量的使用,即使使用E_STRICT也是如此。

答案 5 :(得分:0)

有类似的东西:在PHP中,您可以更改错误报告级别。在开发环境中将其设置为最大值是最佳实践。为此:

添加PHP.ini:

error_reporting = E_ALL

或者您可以将其添加到您正在处理的文件的顶部:

error_reporting(E_ALL);

这不会阻止您的代码运行,但缺少变量分配会在浏览器中显示非常明确的错误消息。

答案 6 :(得分:0)

如果您对文件或Zend Studio中的项目使用“分析代码”,它会警告您任何未初始化的变量(这实际上有助于找到大量拼写错误的变量,这些变量潜伏在很少使用的部分代码中等待引起很难发现错误)。也许有人可以在PHP lint函数(php -l)中添加该功能,该功能目前仅检查语法错误。