我有一个小型的基于PHP web的应用程序,正在开始适度增长。
考虑到 PHP 是一个松散/弱类型的动态语言,我开始关注如何管理PHP代码库。
其他人如何根据松散/弱类型的动态语言来管理他们的代码?
对于PHP是否存在预解析器,允许我在代码库上运行检查以标识如下所示的情况?
$var1 = 'data';
// vr1 doesn't exist, it's a typo of $var1, but PHP would allow for this and not complain
echo $vr1;更新
上面的示例可能不是最好的示例,但本质上,我试图传达的是,只有在代码在运行时在生产中运行时,才会发现动态弱类型化语言中的某些错误;而在编译时,通常会在强类型静态语言中发现其中一些问题。
在将我的代码转移到生产中之前,我还如何在PHP中找到这些非算法类型的错误,而不需要创建大量的单元测试呢?
因此,在进入生产之前,有什么地方可以运行我的PHP代码吗?这个预处理器解析我的代码,以确保我只使用定义的变量等等。本质上,检查我的代码以验证非算法类型的用途。不尝试在字符串上执行代数等。
更新2
请注意,这个问题仍然是没有回答的,因为我正在寻找一种方法来识别这些类型的非算法错误在“编译”类型,而不是运行时。
发布于 2010-07-26 01:59:07
运行时错误
未初始化的变量是PHP中的运行时错误(级别E_NOTICE),因此只能在运行时看到它们。根据代码的执行方式,您给出的示例可能结束于错误,也可能没有错误。例如,$vr1可能是在条件include()中定义的,该条件include()有时包括,有时不包含。
此外,还可以使用可变变量 ($$var)在运行时动态创建变量,因此$vr1实际上可能在某个地方定义。如果PHP解释器无法运行有效的语法,或者在有效语法上出现编译器错误,那将是另一种类型的问题。
您可以将未初始化的变量环境与除以零错误进行比较。这不是一个错误,除非它真的发生。
编译时错误是PHP中的E_PARSE、E_COMPILE_ERROR或E_COMPILE_WARNING (不是致命的)。这些内容包括缺少文件、函数或类,即尝试执行不存在的代码--这是PHP不可能做到的。如果PHP有能力的话,它会尝试。
检测与预防
至少,您应该确保您的开发和测试环境在ini中打开了所有PHP错误垃圾:
error_reporting = E_ALL|E_STRICT
display_errors = On或者在运行时:
error_reporting(-1);自律
关于使用PHP的几个技巧可能会有所帮助:
include()-based控件结构例如,在上面的示例中,如果必须将变量传递到函数或方法,在使用参数isset()或!== null之前检查它,则可以避免或减轻未初始化变量的问题。
资源
is_int()、is_float()等。https://stackoverflow.com/questions/3331107
复制相似问题