Zephir靜態分析

原文連接:靜態編譯分析 #判斷未初始化的變量 靜態分析功能會嘗試去確認變量在使用以前已被初始化。html

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在編譯時會主動監測代碼是否會被執行,若是檢測到代碼不可能被執行到的話會主動在編輯結果中去除這部分代碼。如:ide

class Utils
{
        public function someMethod(b)
        {
                if false {
                        // This is never executed
                        echo "hello";
                }
        }
}
相關文章
相關標籤/搜索