条件未分配的变量

工作分配的静态分析尝试确定变量在赋值之前是否已使用:

  1. class Utils
  2. {
  3. public function someMethod(b)
  4. {
  5. string a; char c;
  6. if b == 10 {
  7. let a = "hello";
  8. }
  9. //a could be unitialized here
  10. for c in a {
  11. echo c, PHP_EOL;
  12. }
  13. }
  14. }

上面的示例说明了一种常见情况。 只有当 b 等于 10时, 才会分配变量 a, 然后需要使用此变量的值–但它可能未初始化。 Zephir 检测到这一点, 自动将变量初始化为空字符串, 并生成警告开发人员:

  1. 警告:第一次在条件分支中分配变量a
  2. 考虑在声明中初始化它
  3. /home/scott/test/test/utils.zep on 21 [conditional-initialization]
  4. for c in a {

发现这样的错误有时是很棘手的, 但是静态分析可以帮助程序员提前发现错误。