首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP:代码检查器,因为PHP是一种松散的类型/动态语言?

PHP:代码检查器,因为PHP是一种松散的类型/动态语言?
EN

Stack Overflow用户
提问于 2010-07-25 21:36:04
回答 8查看 2.3K关注 0票数 0

我有一个小型的基于PHP web的应用程序,正在开始适度增长。

考虑到 PHP 是一个松散/弱类型的动态语言,我开始关注如何管理PHP代码库。

其他人如何根据松散/弱类型的动态语言来管理他们的代码?

对于PHP是否存在预解析器,允许我在代码库上运行检查以标识如下所示的情况?

代码语言:javascript
复制
$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

请注意,这个问题仍然是没有回答的,因为我正在寻找一种方法来识别这些类型的非算法错误在“编译”类型,而不是运行时。

EN

Stack Overflow用户

发布于 2010-07-26 01:59:07

运行时错误

未初始化的变量是PHP中的运行时错误(级别E_NOTICE),因此只能在运行时看到它们。根据代码的执行方式,您给出的示例可能结束于错误,也可能没有错误。例如,$vr1可能是在条件include()中定义的,该条件include()有时包括,有时不包含。

此外,还可以使用可变变量 ($$var)在运行时动态创建变量,因此$vr1实际上可能在某个地方定义。如果PHP解释器无法运行有效的语法,或者在有效语法上出现编译器错误,那将是另一种类型的问题。

您可以将未初始化的变量环境与除以零错误进行比较。这不是一个错误,除非它真的发生。

编译时错误是PHP中的E_PARSEE_COMPILE_ERRORE_COMPILE_WARNING (不是致命的)。这些内容包括缺少文件、函数或类,即尝试执行不存在的代码--这是PHP不可能做到的。如果PHP有能力的话,它会尝试。

检测与预防

至少,您应该确保您的开发和测试环境在ini中打开了所有PHP错误垃圾:

代码语言:javascript
复制
error_reporting = E_ALL|E_STRICT
display_errors = On

或者在运行时:

代码语言:javascript
复制
error_reporting(-1);

自律

关于使用PHP的几个技巧可能会有所帮助:

  • 使用功能程序设计
  • 建立代码气味并编写干净的语法
  • 做您自己的类型检查(OOP和函数式编程可以使这更容易)
  • 避免全局范围和include()-based控件结构
  • 使用带有代码识别辅助工具的IDE,如Netbeans

例如,在上面的示例中,如果必须将变量传递到函数或方法,在使用参数isset()!== null之前检查它,则可以避免或减轻未初始化变量的问题。

资源

  • 比较算子 (具体而言,请参见标识)
  • 类型比较表
  • is_int()is_float()等。
票数 4
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3331107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档