Как в PHP (да и не важно где) хранятся переменные, сами переменные (названия, может что-то еще) не значения? Я начал с языка PHP, т.к. сам являюсь разработчиком PHP. Я знаю про zval структуру (php 5.6), как под нее выделяется память, какие атрибуты у этой структуры. Более того, я в рамках универа неплохо писал на языке C, а потом на C++11 фреймворк Qt (даже на ассемблере написал порядка 300 строк). Т.е. что такое куча и указатель, что такое malloc/realloc я имею представление. Но, вхожу в ступор, когда размышляю, а как PHP собственно хранит само имя переменной? Откуда он знает, что такая переменная есть (с таким именем) в данном контексте, как выглядит типичная структура данных, которая хранит переменную (не значение)? Ответ на данный вопрос не могу найти в гугле. Спасибо.
В PHP имена переменных хранятся в специальной структуре данных, называемой symbol table (таблица символов). Symbol table представляет собой хэш-таблицу, в которой ключами являются имена переменных, а значениями - сами переменные.
Когда вы создаёте переменную в PHP, её имя добавляется в symbol table текущего контекста (глобального или локального), а затем создаётся zval структура, которая будет хранить значение переменной. Zval содержит указатель на symbol table entry, которая содержит информацию об имени переменной, её области видимости и прочие метаданные.
Таким образом, PHP обеспечивает доступ к переменным по их именам, обращаясь к symbol table для поиска соответствующей переменной. Как только переменная будет удалена или выйдет из области видимости, соответствующая запись в symbol table также будет удалена.
Если у вас есть опыт работы с C и ассемблером, вам будет интересно изучить исходный код PHP, чтобы лучше понять, как реализован механизм работы с переменными и их именами.
В PHP имена переменных хранятся в специальной структуре данных, называемой symbol table (таблица символов). Symbol table представляет собой хэш-таблицу, в которой ключами являются имена переменных, а значениями - сами переменные.
Когда вы создаёте переменную в PHP, её имя добавляется в symbol table текущего контекста (глобального или локального), а затем создаётся zval структура, которая будет хранить значение переменной. Zval содержит указатель на symbol table entry, которая содержит информацию об имени переменной, её области видимости и прочие метаданные.
Таким образом, PHP обеспечивает доступ к переменным по их именам, обращаясь к symbol table для поиска соответствующей переменной. Как только переменная будет удалена или выйдет из области видимости, соответствующая запись в symbol table также будет удалена.
Если у вас есть опыт работы с C и ассемблером, вам будет интересно изучить исходный код PHP, чтобы лучше понять, как реализован механизм работы с переменными и их именами.