Zephir静态分析

原创
2016/03/05 20:52
阅读数 61

原文链接:静态编译分析 #判断未初始化的变量 静态分析功能会尝试去确认变量在使用之前已被初始化。

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;
                }
        }
}

以上代码展示了一个常见的错误情况。其中的变量a只有在b等于10时才会被初始化,然后后面的代码中使用了变量a,但是这个变量a可能没有被初始化。Zephir会自动的创建这个变量并赋予默认值为空字符串并抛出一个警告。

Warning: Variable 'a' was assigned for the first time in conditional branch,
consider initialize it in its declaration in
/home/scott/test/test/utils.zep on 21 [conditional-initialization]

        for c in a {

要找出这种错误是不容易的,隐性BUG。但是静态分析会帮助编程者更容易的寻找到这些BUG。 #去除不可能被执行的代码 Zephir在编译时会主动监测代码是否会被执行,如果检测到代码不可能被执行到的话会主动在编辑结果中去除这部分代码。如:

class Utils
{
        public function someMethod(b)
        {
                if false {
                        // This is never executed
                        echo "hello";
                }
        }
}
展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部