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