Суть в чем, лучше сразу пример:
Есть:
PHP код:
function test($arg0){
...
}
Есть где-то в документе дальше ее вызов:
PHP код:
$superPuperVar = 77;
test($superPuperVar);
Так, естественно параметры передаются нормально, но очень-очень хочется (предвосхищая вопросы, прежде всего для дебага и логгинга) получть не только значение или ссылку на значение, а именно в самой функции получить с каким параметром ее реально вызвали в самом документе, в виде строки, скажем в данном случае хочется понять что первый аргумент был именно '$superPuperVar' а не прямой вызов test(77).
Такое вообще возможно?
Долго читал доки, так и не нашел.
Есть debug_backtrace() он говорит откуда вызвано (файл, строка и все то же значение параметра). Появилась безумная идея открыть этот файл и распарсить напрямую ту строку либо регулярным выражением, либо с помощью прямого перебора
токенов. Но есть несколько НО тут:
- Сам по себе метод изначально крив
- В выводе debug_backtrace есть только номер строки, не символа, значит впринципе нету надежного способа определить если в одной строке несколько вызовов одной и той же функции
- debug_backtrace возвращает строку закрывающей скобки, а не открывающей, если вызов больше чем на строку. Ну это решаемо конечно, но дополнительный геморой все же.
- Даже исходя из предположения что она в строке одна, это оказывается весьма и весьма трудоемкой задачей, если попытаться написать общий случай вызова, с вложенными скобками, кавычками, отступами и прочим и прочим... (писать полноценный парсер PHP на PHP как-то совсем не входило в мои планы)
В итоге так и не знаю что делать. Смотрел в сторону Runkit, Parsekit, Tokenizer, Aggregation... Может кто-то уже все-таки делал подобное и поделиться опытом??