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

John1123

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

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

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

PHP:
$a = 5; $b = 10;
my_func($a);
my_func($b);
должен вывести что-то типа:

$a = 5
$b = 10

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

John1123

Новичок
Не нужно? А как вы предлагаете реализовать подобный функционал?

PHP:
my_func($a, "$a");
my_func($a, "$b");
Это ужасно.
 

Фанат

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

объясняй, зачем тебе понадобилось имя переменной
 

John1123

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

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

John1123

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

Так что скорее всего второе.
 

Фанат

oncle terrible
Команда форума
Я только одного не понял.
как можно определить нормальность или ненормальность абстрактной анонимной переменной.

-~{}~ 28.05.07 18:39:

и класс, на вход которому передается "много параметров" - тоже подозрительно
 

John1123

Новичок
2 Михалыч: Спасибо. Сегодня попробую.

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

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


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

Фанат

oncle terrible
Команда форума
это не дебаг
а проверка юзерских данных.
и здесь делается все совсем по-другому. в частности, описывается соответствие имени переменной тексту, который пишется в форме рядом с полем ввода.
чтобы вывести на экран "Вы не заполнили поле емейл прабабушки по линии тёщи"

высасывай из пальца другой пример.
 

John1123

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

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

UPD: про "не дебаг" в данном случае склонен согласиться.
 

Crazy

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

Код:
check_email($_GET["var0"], 'email1_err');
check_email($_GET["var1"], 'email2_err');
check_email($_GET["var3"], 'email3_err');
...где вторым параметром -- id спана для вывода ошибки.
 

Фанат

oncle terrible
Команда форума
ага. расскажи ещё, что на момент создания класса, он не будет знать по каким критериям переданные переменные проверять.

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

John1123

Новичок
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);
 

Crazy

Developer
Автор оригинала: John1123
Задача класса рассказать что не верно в пользовательском вводе.
В самом деле? Кому и как он рассказывает? В приведенной тобой интерфейсе ничего такого нет. Ты спроектировал класс, чтобы он молчал как партизан -- он и молчит как партизан.

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

Код:
check_email($_GET["var0"], new HtmlFormNotifier('email1_err'));
Обнаружив ошибку, check_email вызывает у переданного объекта метод notify_error с нужными параметрами. И ему пофигу, как и кому это будет передано.
 

John1123

Новичок
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 не подходит - ни слова об имени переменной.

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