021 Статический анализ
Компилятор 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";
        }
    }
}
