Конструкция, обратная $$?

John1123

Новичок
Конструкция, обратная $$?

Здравствуйте.

Положим, надо написать функцию для вывода переменной-параметра, т.е. код

PHP:
$a = 5; $b = 10;
my_func($a);
my_func($b);

должен вывести что-то типа:

$a = 5
$b = 10

Как узнать имя переменной-параметра ("$a" и "$b"), и есть ли вообще конструкция обратная $$?
 
Не нужно? А как вы предлагаете реализовать подобный функционал?

PHP:
my_func($a, "$a");
my_func($a, "$b");

Это ужасно.
 
а никак не предлагаю.
предлагаю пописать один раз в жизни на компилируемом языке, без костылей интерпретатора, и раз навсегда отучиться от всей этой кривизны.

объясняй, зачем тебе понадобилось имя переменной
 
Для дебага.
В переменных и массивах передаю классу данные.
Параметров на вход подается много.
А в случае ошибки класс должен сообщить, не нравится переменная такая-то (если массив - переменная такая, ключ такой)

Ну не перебирать же руками все переменные на предмет какая именно не понравилась моему классу... :(
 
Не понял вопрос.
Класс должен уметь работать в дебаг-режиме, при котором отображать в каких именно переменных проблема.

Так что скорее всего второе.
 
Я только одного не понял.
как можно определить нормальность или ненормальность абстрактной анонимной переменной.

-~{}~ 28.05.07 18:39:

и класс, на вход которому передается "много параметров" - тоже подозрительно
 
2 Михалыч: Спасибо. Сегодня попробую.

---------------
2 Фанат: Соответствие определенным критериям.

Пример с потолка
п
check_email($_GET["var0"]);
check_email($_GET["var1"]);
check_email($_GET["var3"]);


Теперь представь, что таких проверок много. И не только на мыл, а и на многочтоещё.
При сообщении "Неверный адрес e-mail" угадай, в какой из трех переменных ошибка? А ведь переменных отдаваемых на проверку может быть много-много больше.
 
это не дебаг
а проверка юзерских данных.
и здесь делается все совсем по-другому. в частности, описывается соответствие имени переменной тексту, который пишется в форме рядом с полем ввода.
чтобы вывести на экран "Вы не заполнили поле емейл прабабушки по линии тёщи"

высасывай из пальца другой пример.
 
Нет. Как раз удачный пример.

На момент создания класса мы-то не знаем что у кого там на форме написано будет. или это самое "написано будет" передавать классу?

UPD: про "не дебаг" в данном случае склонен согласиться.
 
John1123, поскольку в реальном скрипте нужно будет показать на форме ошибочное поле -- в этом месте гарантированно будет дополнительный параметр, указываеющий на поле, в котором нужно выводить ошибку. Т.е. будет, к примеру:

Код:
check_email($_GET["var0"], 'email1_err');
check_email($_GET["var1"], 'email2_err');
check_email($_GET["var3"], 'email3_err');

...где вторым параметром -- id спана для вывода ошибки.
 
ага. расскажи ещё, что на момент создания класса, он не будет знать по каким критериям переданные переменные проверять.

как твой класс узнает, что для $_GET["var0"] надо запускать check_email, а для $_GET["var10"] - check_age?
 
2 Crazy:

Задача класса рассказать что не верно в пользовательском вводе. Остальные рюшечки типа раскрашивания формы - не его задача.

----
2 Фанат:

PHP:
$a->check_email($_GET["var0"])
$a->check_age($_GET["var10"])

:))
А если серьезно:

PHP:
$a->assign(".var0", "mail");
$a->assign(".var10", "age");
$a->check($_GET);
 
Автор оригинала: John1123
Задача класса рассказать что не верно в пользовательском вводе.
В самом деле? Кому и как он рассказывает? В приведенной тобой интерфейсе ничего такого нет. Ты спроектировал класс, чтобы он молчал как партизан -- он и молчит как партизан.

Хочется оторвать раскраску от проверки? Тривиальное стандартное решение:

Код:
check_email($_GET["var0"], new HtmlFormNotifier('email1_err'));

Обнаружив ошибку, check_email вызывает у переданного объекта метод notify_error с нужными параметрами. И ему пофигу, как и кому это будет передано.
 
2 Crazy: Примерно понял. Спасибо. Думаю делать через алиасы. Так даже удобнее, только чуть сложнее интерфейс будет.
$a->check($_GET, "get");
$a->check($_POST, "post");
или даже так
$a->check($_GET["var0"], "email");
на выходе положит мне в ошибки типа такого
get["var0"] содержит неверный e-mail
post["var3"] содержит неверный url
или даже так
email содержит неверный адрес.
---------------
2 Михалыч: debug_backtrace не подходит - ни слова об имени переменной.

Спасибо всем.
 
Сверху