![]() |
Call time parameters
Суть в чем, лучше сразу пример:
Есть: PHP код:
PHP код:
Такое вообще возможно? Долго читал доки, так и не нашел. Есть debug_backtrace() он говорит откуда вызвано (файл, строка и все то же значение параметра). Появилась безумная идея открыть этот файл и распарсить напрямую ту строку либо регулярным выражением, либо с помощью прямого перебора токенов. Но есть несколько НО тут:
В итоге так и не знаю что делать. Смотрел в сторону Runkit, Parsekit, Tokenizer, Aggregation... Может кто-то уже все-таки делал подобное и поделиться опытом?? |
Делать - не делал, но посмотрел бы в сторону Reflection. Правда, он предназначен для реверс-инжиниринга кода, и поможет ли в анализе рантайма с нужными тебе подробностями - утверждать не могу.
|
Ну собственно парсер я-таки накидал работает, единственное не вижу никакого способа решить 2 пункт выше...
Saruman, прежде всего, спасибо большое за ответ. Я забыл его упомянуть, Reflection я тоже смотрел краем глаза. Собственно в поисках пробовал даже, чуть ниже приведенный, пример "Example#3 Using the ReflectionParameter class" - оно неплохо работает, но именно для формальных параметров, то есть для определения функций и методов, но не рантайм к сожалению. Ну или я не вьехал как сделать нужное мне.... |
А может просто добавить строковую переменную?
Получатся такие варианты вызова: test($superPuperVar, "$superPuperVar"); test(77, ""); |
Цитата:
Но очень хочется какраз писать просто скажем dump($someVar) и на выходе получить (упрощая разумеется) что-то типа: Var $varName has value: var_dump($varValue); Это первая, и наверное самая главная причина. Вторая, во многих методах, для проверки переданного значения я использую макрос REQUIRED_VAR, приблизительно таким способом: $myVar = REQUIRED_VAR($_REQUEST['varFromUser']); где REQUIRED_VAR не делает ничего, кроме как "проверяет" переменную переданную по ссылке (if(!$var)) и возбуждает исключение VariableRequiredException если она пустая. Так вот, писать во всех местах $myVar = REQUIRED_VAR($_REQUEST['varFromUser'], '$_REQUEST[\'varFromUser\']'); мало того что избыточно, так и просто утомительно, поскольку используется весьма часто и в разных местах. А иначе, я конечно ловлю исключение, но если в try-блоке было 5-7 таких вызовов, то даже нету возможности узнать какое именно значение пустое :( Ну и конечно же строка в логе типа просто "2008-02-26 04:52:31: var: Variable requered!" выглядит намного менее полезной чем скажем: "2008-02-26 04:52:31: var: Variable $_REQUEST['mail'] requered!", согласитесь. P.S. Эээх, хоть это и интерпретатор, а все-таки не хватает хоть элементарного препроцессора иногда (я бы тогда в первую очередь еще "$this->" заменил бы на что-нибудь типа "$->" хотя бы)... |
Цитата:
|
| Часовой пояс GMT +4, время: 16:07. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.