Компилятор 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;
            }
        }
    }

Приведенный выше пример иллюстрирует общую ситуацию. Переменная a назначается только тогда, когда b равно 10, тогда требуется использовать значение этой переменной, но она может быть неинициализирована. 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 {

Найти такие ошибки иногда сложно, однако статический анализ помогает программисту заранее найти ошибки.

Устранение мертвого кода

Zephir сообщает разработчику о недостижимых ветвях в коде и выполняет удаление мертвого кода, что означает, что он избавляется от всего этого кода от сгенерированного двоичного файла, поскольку он не может быть выполнен в любом случае:

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

 

Содержание.

Предыдушая Следующая