我有一个小型的基于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-25 21:37:45
您可以使用皮棉使用php -l filename.php。这将显示任何语法错误。在你写代码的时候,有一些IDE会变傻。这些通常也能发现问题,如你的问题,除了皮毛。
除此之外,请考虑代码的写UnitTests,以确保功能,并查看http://phpqatools.org的许多其他工具,这些工具可以帮助您提高代码质量。
确保在开发期间设置了error_reporting(-1);以启用所有错误,此外还启用了php.ini中的display_errors和display_startup_errors。禁用生产系统中的后两者,以防止服务器信息的泄露。
编辑更新后:的源代码是实时编译的.PHP的编译时在运行时是有效的。如果您想要编译PHP,就必须使用Facebook的HipHop。
发布于 2010-07-25 21:39:28
如果您适当地设置了error_reporting配置指令,PHP肯定会通过警告或通知来抱怨这一点。
请参见:
http://us2.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting
发布于 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
复制相似问题