Статический анализ
Компилятор Zephir предоставляет возможность статического анализа компилируемого кода. Идея этой функции заключается в том, чтобы помочь разработчику найти потенциальные проблемы и избежать неожиданного поведения задолго до времени исполнения.
Условные неинициализированные переменные
При присвоении значения переменно статический анализатор пытается определить, используется ли переменная до ее инициализации:
class Utils
{
public function someMethod(b)
{
string a; char c;
if b == 10 {
let a = "привет";
}
// Есть вероятность, что переменная "a" не определена
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 {
// Этот код никогда не выполнится
echo "hello";
}
}
}