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