Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2011, 10:39   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию PHP и как узнать имя переменной

Добрый день, возник вопрос, как средствами php можно узнать имя переменной, т.е. допустим имеется следующий код
Код:
<?php
fucntion get_perem_and_values($value)
{
 echo 'Имя переменной: ',<тут я не знаю что>;//хотелось бы что бы вывелось имя переменной
echo 'Значение: ',$value;
}
$name="бла-бла-бла";
get_perem_and_values($name);
?>
на выходе хотел бы получить следующие:
Имя переменной: $name;
Значение: бла-бла-бла
CodeNOT вне форума Ответить с цитированием
Старый 30.06.2011, 10:58   #2
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
как средствами php можно узнать имя переменной, т.е. допустим имеется следующий код
Такая тема уже была на этом форуме, ищите. Самое главное что это бессмысленно - имя переменной это исключительно для программиста, для системы имена не важны.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 30.06.2011, 11:24   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Как бы вам сказать, я собрался сохранять их для некоторой ерунды)
CodeNOT вне форума Ответить с цитированием
Старый 30.06.2011, 11:35   #4
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Как бы вам сказать, я собрался сохранять их для некоторой ерунды)
Ещё раз - система не сохраняет и не знает написанного вами имени переменной. Тем более в вашем примере переменная станет локальной и её "имя" изменится.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 30.06.2011, 11:52   #5
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Хм, тогда что вы мне ответите про сиреализацию объектов в таком случае? Я могу полностью сохранить объект в файл собственно)
CodeNOT вне форума Ответить с цитированием
Старый 30.06.2011, 11:59   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

CodeNOT
Возможно, вам поможет эта статья(сам не пробовал):
Как определить/узнать имя переменной средствами PHP
Andkorol вне форума Ответить с цитированием
Старый 30.06.2011, 12:11   #7
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Хм, тогда что вы мне ответите про сиреализацию объектов в таком случае?
А как сериализация относится к теме вашего вопроса!?

Цитата:
Я могу полностью сохранить объект в файл собственно)
Браво! Медаль в студию!
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 30.06.2011, 12:12   #8
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

Теоретически можно просканить глобал-скоуп (если вы вызываете функцию из него), сравнить значения переменных и некоей долей вероятности получить имя переменной по значению которое равно заданному... Если значения, которые вы задаёте переменным уникальны... Но это порнография... даже так, домашнее любительское порно, я бы даже сказал.

А хотите - по настоящему ? (с) /*И у танка отвалилась башня*/
Есть полезнейшая функция debug_backtrace();. она возвращает массив вот такого, например, вида:

Цитата:
array(1) {
[0]=>
array(4) {
["file"]=>
string(22) "/www5/htdocs/test2.php"
["line"]=>
int(4)
["function"]=>
string(1) "t"
["args"]=>
array(1) {
[0]=>
&int(50)
}
}
}
Функция t находится в файле тест.пхп, но позвал я её из тест2.пхп. Шо мы собстна и имеем счастье наблюдать в массиве. Так как в РНР передаются значения, а не переменные, лёгкое и простое счастье нам тут не светит (функция не может знать, какую переменную ей послали, потому что ей посылают не переменную.).
Но ! Внимание ! PHP - это всё же интерпретатор, а не компилятор, поэтому счастье всё же нам светит, хоть тяжёлое, сложное и трудоёмкое.
У нас есть строка, есть полное имя файла, есть имя функции. Вуаля! Открываем файл для чтения, (а мы можем его открыть для чтения, и даже это сделали, когда были апачем. Да мы и сейчас апач, что скрывать-то...), выдёргиваем из него эту самую строку, парсим её хоть тем же прег-матчем и получаем строку аргументов, с которой позвали эту самую функцию, в которой мы и находимся.

А вот это уже не порно, это уже полнейший БДСМ. Можно даже акцию открыть: "Вставь такой скрипт куда нибудь в продакшн!, дождись следующего программиста!, признайся, кто там вот ЭТО сделал!, и дай ему осуществить твои самые развращённые мазохистские фантазии!!!".

PS: Имейте в виду - там не всё так просто с этим массивом, повардампте его хорошенько перед использованием.



UPD: Пока писал всю эту чушь, пропустил часть ответов. В статье_по_ссылке, к сожалению, лёкого способа узнать, с какой переменной в качестве параметра вызвали функцию, нет .
UPD2:И действительно, к чему здесь сериализация O_o ?

Последний раз редактировалось graymaster; 30.06.2011 в 12:44.
graymaster вне форума Ответить с цитированием
Старый 30.06.2011, 14:12   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Вариант, основанный на использовании debug_backtrace() :
(грабли указаны в посте выше)
PHP код:
function get_var_name$v ) { 
    
$trace debug_backtrace(); 
    
$vLine file__FILE__ ); 
    
$fLine $vLine$trace[0]['line'] - ]; 
    
preg_match"#\\$(\w+)#"$fLine$match ); 
    return 
$match[1]; 

$string_var "knight"
$array_var = array( 12); 
$numeric_var 12345;
echo 
get_var_name$string_var ), '<br/>'
echo 
get_var_name$array_var ), '<br/>'
echo 
get_var_name$numeric_var ), '<br/>'
Не идеал, конечно - но вроде работает...
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как присвоить переменной имя файла mayonez Общие вопросы Delphi 3 27.06.2010 13:02
Как узнать имя юзера Betty Общие вопросы Delphi 4 07.01.2010 10:50
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06
Как узнать имя кнопки? LeGAl Microsoft Office Excel 1 10.03.2009 00:04
Как узнать имя файла??? Shurik Hacker Работа с сетью в Delphi 3 20.11.2007 17:06