Python的约定是变量是通过第一次赋值创建的,并且在分配一个变量之前尝试读取它们的值会引发异常.相反,PHP在读取时会隐式创建一个变量,并带有空值.这意味着在PHP中很容易做到这一点:
function mymodule_important_calculation() { $result = /* ... long and complex calculation ... */; return $resukt; }
此函数始终返回null,如果null是functuion的有效值,则该bug可能会在一段时间内未被检测到. Python等价物会抱怨变量resukt在分配之前被使用.
那么……有没有办法将PHP配置为更严格的变量赋值?
PHP在解析时没有做太多的事情检查.
你能做的最好的事情是提高警告级别以报告你的错误,但是当你得到E_NOTICE时,它太晚了,并且不可能提前强制E_NOTICES发生.
很多人都在使用“error_reporting E_STRICT”标志,但它仍然是追溯性警告,并且不会保护您免受您发布的错误代码错误.
这个宝石出现在本周的PHP-dev邮件列表中,我认为它只是你想要的工具.它更像是一个lint-checker,但它增加了当前lint检查PHP的范围.
PHP-Initialized Google Project
我们希望通过一些关注,我们可以在PHP本身中实现这种行为.所以把你的2美分放在PHP邮件列表/ bug系统/功能请求上,看看我们是否可以鼓励它的集成.