Показать сообщение отдельно
Старый 26.02.2008, 03:01     # 1
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Call time parameters

Суть в чем, лучше сразу пример:

Есть:
PHP код:
function test($arg0){
...

Есть где-то в документе дальше ее вызов:
PHP код:
$superPuperVar 77;
test($superPuperVar); 
Так, естественно параметры передаются нормально, но очень-очень хочется (предвосхищая вопросы, прежде всего для дебага и логгинга) получть не только значение или ссылку на значение, а именно в самой функции получить с каким параметром ее реально вызвали в самом документе, в виде строки, скажем в данном случае хочется понять что первый аргумент был именно '$superPuperVar' а не прямой вызов test(77).

Такое вообще возможно?

Долго читал доки, так и не нашел.
Есть debug_backtrace() он говорит откуда вызвано (файл, строка и все то же значение параметра). Появилась безумная идея открыть этот файл и распарсить напрямую ту строку либо регулярным выражением, либо с помощью прямого перебора токенов. Но есть несколько НО тут:
  1. Сам по себе метод изначально крив
  2. В выводе debug_backtrace есть только номер строки, не символа, значит впринципе нету надежного способа определить если в одной строке несколько вызовов одной и той же функции
  3. debug_backtrace возвращает строку закрывающей скобки, а не открывающей, если вызов больше чем на строку. Ну это решаемо конечно, но дополнительный геморой все же.
  4. Даже исходя из предположения что она в строке одна, это оказывается весьма и весьма трудоемкой задачей, если попытаться написать общий случай вызова, с вложенными скобками, кавычками, отступами и прочим и прочим... (писать полноценный парсер PHP на PHP как-то совсем не входило в мои планы)

В итоге так и не знаю что делать. Смотрел в сторону Runkit, Parsekit, Tokenizer, Aggregation... Может кто-то уже все-таки делал подобное и поделиться опытом??
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.

Последний раз редактировалось Hubbitus; 26.02.2008 в 04:46. Причина: Очепятки исправил
Hubbitus вне форума