Можно сказать только одно — я хочу с вами работать :))
После стек-ориентированных ассемблеров JVM / .NET внутренности PHP выглядят… ожидаемо, но непривычно. Особенно вскрывают мозг опкоды типа ECHO и YIELD. Интересно, насколько такой формат байт-кода более (менее?) пригоден для оптимизации.
Кто нибудь может пояснить практическую пользу этих знаний? Можно ли сказать, что если я знаю как работает виртуалка, я знаю как работает C? Я не тролю, просто не в курсе.

Ну например можно понять почему необычный код работает так необычно. Предлагаю на практике посмотреть какие опкоды генерирует строка:


echo print(5) . print(6) . print(7);

Т.к. без понимания этого — результат выполнения может порушить психику особо восприимчивых :D

Ну тут можно ещё просто помнить что print это не функция и соответственно скобки тут ничего не дают.

Потому будет:
761511
так как выполнение будет справа на лево работать.

Ну это довольно очевидно для тех, кто знает, что пых правоассоциативный. Хорошо, а в этом варианте?


$items = [1, 2, 3, 4];

foreach ($items as &$i) {
    var_dump($i);
}

foreach ($items as $i) {
    var_dump($i);
}

Эту особенность, думаю, как раз через опкоды только можно раздебажить. У меня логических объяснений нет.

Последняя ссылка из первого цикла останется висеть.
Для подобных циклов крайне рекомендуется после цикла писать
unset($i);

Полагаю будет происходить следующее.
Каждый элемент массива будет записываться в последний элемент массива и второй вывод даст последовательность:
1,2,3,3
В таких случаях это должно быть требование, а не рекомендация.
а что даст виртуальная машина для php? теперь код нужно компилировать?

Что значит "даст"? VM в пыхе ещё со время fi версии есть. Тот же опкеш и ускоряет загрузку путём избавления кеширования байткода и выгрузки оного напрямую в VM, ну если грубо.

Только зарегистрированные пользователи могут оставлять комментарии.
Войдите, пожалуйста.