Что работает быстрее? exit или else

Рейтинг: -1Ответов: 2Опубликовано: 03.04.2015

Вдруг стало интересно - есть ли различия в скорости выполнения скрипта php:

if(1!=1){ echo "Ошибка"; exit; }

/* дальше много - много кода */

или

if(1==1)
{
    /* много - много кода */
}
else
{
    echo "Ошибка";
}

Ответы

▲ 1Принят

Если нельзя измерить, зачит надо просто думать.

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

А если интерпретировать код "в лоб" т.е. сразу, по мере его чтения, то первая форма

if (condition) {... exit;}

без сомнения будет работать быстрее (если условие в if == true).

Т.о. вопрос сводится к -- "Как работает интерпретатор PHP?"

--

Моя догадка -- разницы во времени выполнения не будет.

--

Еще одно замечание -- не стоит делать измерения, когда в if константное выражение.

Update

Вижу в комментариях непонимание текста ответа.

В резюме я написал -- "Моя догадка -- разницы во времени выполнения не будет."

Это означает, что какая-то предварительная компиляция тела функции проводится, по крайней мере весь ее текст будет прочитан до исполнения, т.е. в реальности код не исполняется во время чтения.

Для подтверждения -- небольшой примерчик

avp@avp-xub11:hashcode$ cat t.php
<?php
if(1!=1)
{
   echo "1\n"
   echo Ошибка1;
}
else
{
   echo "2\n";
   echo Ошибка2;
}
?>
avp@avp-xub11:hashcode$ php <t.php 
PHP Parse error:  syntax error, unexpected 'echo' (T_ECHO), expecting ',' or ';' in - on line 5
avp@avp-xub11:hashcode$ 

Как видите -- Parse error в блоке, который не исполняется. А вот реакцию на ошибку echo Ошибка2; мы увидим, если исправим первую (отсутствует ;)

avp@avp-xub11:hashcode$ php <t.php 
2
PHP Notice:  Use of undefined constant Ошибка2 - assumed 'Ошибка2' in - on line 10
Ошибка2avp@avp-xub11:hashcode$ 

Мне кажется, что теперь все достаточно очевидно.

▲ 1

А ничего что это вообще-то разные конструкции и сравнивать их нельзя?