R0 CREW

PHP - оптимизация кода

ru
#1

⁠Привет Всем! =)

Сегодня я задам довольно странный вопрос (я мастер в этом деле :wink: ):
Каким образом PHP-интерпретатор исполняет код? Переводит ли он скрипты в байт-код, а затем исполняет? Если нет, то как именно он их выполняет? Если да, то есть ли возможность подсмотреть в отладчике “генерируемый” им низкоуровневый код?

Просто хотел посмотреть оптимизирует ли PHP-интерпретатор выражения вида:

if( (expression_1) AND (expression_2) )
{ … }

а именно, пропускает ли интерпретатор вычисление второго выражения (expression_2) после того, как узнает, что первое (expression_1) дает FALSE.
Ведь операция AND хотя бы с одним параметром FALSE по-любому дает FALSE

Я так подумал, что если есть оптимизация (пропуск вычисления второго выражения при отрицательном результате первого), то можно прям так и записывать выражения. А если нет, то лучше убрать второе выражение внутрь блока if.

Жду Ваших ответов

WBR, AbreC =)

#2

Транслирует в байт-код. Подсмотреть можно, сам не смотрел - не интересно.

Разработчики трансляторов и компилятор профессионалы знающие свое дело, поэтому все подобные конструкции учтены.

Для проверки используй следующий код:

<?php

function get_sec()
{
    $time = microtime();
    $time = explode(" ",$time);
    $time = $time[0] + $time[1];
    return $time;
}


$start_time = get_sec();

if(sleep(1) AND sleep(1))
{
  // Оба sleep'a возвращают FALSE.
}

$delta_time = get_sec() - $start_time;

echo "$delta_time <br>";


$start_time = get_sec();

if(!sleep(1) AND sleep(1))
{
  // Первый sleep возвращает TRUE, второй FALSE.
}

$delta_time = get_sec() - $start_time;

echo "$delta_time";

?>
#3

Спасибо, root, за замечательный ответ =)

#4

Более подробно по теме:
http://www.xakep.ru/post/56672/