Перед преобразованием исходного кода PHP в код операции, есть ли процесс оптимизации, который устраняет мертвые условия?
Пример:
<?php
if (false) {
echo 'false';
}
echo 'true';
Это превращается просто echo 'true';
?
Если ответ Да, то какая из следующих ситуаций может обработать PHP?
if(false); //Explicit boolean
$true = true; if($true); //Variable that was assigned a constant boolean
if(ClassName::Constant); //Class constant
if(1>2); //Constant value expression
Если есть различия в конкретной версии, пожалуйста, будьте щедрыми.
Да, недостижимые блоки будут устранены частью «прохода блока» оптимизатора opcache. Для ваших конкретных примеров:
if(false); // 1. Will be optimized
$true = true; if($true); // 2. Will NOT be optimized
if(ClassName::Constant); // 3. Will MAYBE be optimized
if(1>2); // 4. Will be optimized
Пример 2 не будет оптимизирован, потому что в настоящее время мы не выполняем постоянное распространение для «реальных» переменных. В настоящее время оптимизатор не использует форму SSA, и поэтому у нас нет уверенности, чтобы выполнить этот тип оптимизации. Как только мы получим это, мы сможем покрыть это, используя пропуск SCP / SCCP.
Пример 3 может быть оптимизирован в зависимости от того, где ClassName
был определен. Вообще, если это либо self
в не подлежащей повторению привязке области или в классе, определенном в том же файле, он будет оптимизирован. Кроме того, значение константы также должно быть статически вычисляемым выражением константы.
Исключение недоступного кода реализовано как часть block_pass.c.
Просто нет, это не устраняет какой-либо код.