静态分析

Zephir 的编译器提供对已编译代码的静态分析。 此功能背后的想法是在运行时之前帮助开发人员发现潜在的问题, 避免意外的行为 。

条件未分配的变量

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

class Utils
{
    public function someMethod(b)
    {
        string a; char c;

        if b == 10 {
            let a = "hello";
        }

        //a could be unitialized here
        for c in a {
            echo c, PHP_EOL;
        }
    }
}

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

警告:第一次在条件分支中分配变量a,
考虑在声明中初始化它

/home/scott/test/test/utils.zep on 21 [conditional-initialization]

    for c in a {

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

死码消除

Zephir 通知开发人员代码中无法访问的分支, 并执行死代码消除, 这意味着它将从生成的二进制文件中删除所有代码, 因为它无论如何都无法执行:

class Utils
{
    public function someMethod(b)
    {
        if false {
            // This is never executed
            echo "hello";
        }
    }
}