- Автор темы
- #11
Ну там вроде 155 коментов, читать не перечитать, причем тема не совсем та, обсуждают в основном какие то деревья, и как выводв комментах вся соль.
коментариев сделать лучше, вообщем совсем не ясно что вы имели ввиду своей фразой "в комментах вся соль.", единственое что нашлось по теме
Написали всего много, давайте теперь обратимся к теории
Что делает PHP интерпретатор когда встречает include?
ответ:
1. парсит код
2. строит дерево связей сущностей (мапинг адресов переменных и констант, деклараций классов и функций)
3. изменяет дерево исполнения.
4. исполняет.
что происходит при повторном подключении?
PHP смотрит на адреса при смене контекста и исполняет байт код собранный ранее. (если файл не меняли)
что происходит при повторном исполнении инклюда?
дерево связий есть, таблица адресов тоже, байт код даже есть, так что копируется кусок байт кода, подготовленного ранее и все (кстати в PHP4 глюки на этой почве народ ловил ^_^).
Теперь что произойдет при eval ??
тоже самое что и в случае с инклюдом, тока откроется внутренний поток ошибок.
что же происходит при повторном вызове eval ??
интерпритатор не может строить предполодений на природу кода который передан в eval поэтому проводит ВСЕ шаги заново.
Как меняет ситуацию акселератор?
в случае если у вас в подключаемом файле есть например такая конструкция echo "this"." my "." file" акселератор может заменить это на константу, убрать операции контененации, т.е. все стандартные фишки акселерации. В случае с eval код через акселератор не пропускается.