Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить имя переменной 
:(
    Опции темы
HackMan
Дата 13.7.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 1
Всего: 9



Реально ли получить имя переменной по самой переменной?

То есть что бы в следствии следующего кода

Код

function func($data)
  {
    echo 'Переменная ' . [что написать?] . ' = ' . $data . '<br>';
  }

$a = 'data';
$b = -2;
$name = 10;

func($a);
func($b);
func($name);


было отображено в браузере

Код

Переменная a = data
Переменная b = -2
Переменная name = 10


Это сообщение отредактировал(а) HackMan - 13.7.2008, 17:18


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
skyboy
Дата 13.7.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



реально.
вот так:
Код

function func($data)
  {
    echo 'Переменная $data = ' . $data . '<br>';
  }

а зачем тебе?
для отладки? так есть get_defined_vars - можно посмотреть все доступные в области видимости переменные
PM MAIL   Вверх
HackMan
Дата 13.7.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 1
Всего: 9



Не, в этом случае всегда будет выводится не имя переменной, а "$data".

Да, для отладки. Поставил класс для отладки krumo, поражаюсь, как я без него раньше обходился  smile Только он при отображении дампа переменной не выводит имя этой переменной, а было бы очень удобно.

Это сообщение отредактировал(а) HackMan - 13.7.2008, 17:58


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
skyboy
Дата 13.7.2008, 18:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(HackMan @  13.7.2008,  16:56 Найти цитируемый пост)
а "$data".

но ведь внутри функции именем переменной будет как раз "$data", разве нет? чуешь к чему я клоню? запросы у тебя дико нереальные.
Код

$s= 11;
function a($data)
{
 return b($data);
}

function b($data1)
{
 // какое из "имен переменных" ты хотел бы тут видеть? $s, $data или $data1?
}

или вот тебе ещё задачка:
Код

$s= 222;
$d= &$s;
function some($data)
{
  // что ты хотел бы видеть здесь: $d, $s или $data?
}
$some($d);

интересно, как ты ответишь на эти вопросы  smile 
PM MAIL   Вверх
HackMan
Дата 13.7.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 1
Всего: 9



э..хороший вопрос  smile 
наверное, хотелось бы видеть имя той переменной, с какой строчки вызвали функцию krumo::dump(), то есть в первом варианте вывести $data, а во втором - $d.


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
Feldmarschall
Дата 13.7.2008, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



Цитата(HackMan @  13.7.2008,  17:56 Найти цитируемый пост)
поражаюсь, как я без него раньше обходился 

а не подскажешь в двух словах, в чем его прелесть?
я посмотрел, но не понял, если честно. он ведь только внешний вид вывода меняет? или что-то ещё делает?
PM   Вверх
HackMan
Дата 13.7.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 1
Всего: 9



Это немного не по теме, но в двух словах - облегчает отладку. 
  • Более наглядно отображает содержание переменных. Порой трудно бывает сконцентрировать внимание на данных вроде этих:
    Код

    object(Registry)#1 (1) { ["vars:private"]=>  array(2) { ["template"]=>  object(Template)#2 (2) { ["registry:private"]=>  object(Registry)#1 (1) { ["vars:private"]=>  array(2) { ["template"]=>  object(Template)#2 (2) { ["registry:private"]=>  *RECURSION* ["vars:private"]=>  array(0) { } } ["router"]=>  object(Router)#3 (2) { ["registry:private"]=>  *RECURSION* ["path:private"]=>  string(41) "C:\Servers\localhost\www\controllers\" } } } ["vars:private"]=>  array(0) { } } ["router"]=>  object(Router)#3 (2) { ["registry:private"]=>  object(Registry)#1 (1) { ["vars:private"]=>  array(2) { ["template"]=>  object(Template)#2 (2) { ["registry:private"]=>  *RECURSION* ["vars:private"]=>  array(0) { } } ["router"]=>  object(Router)#3 (2) { ["registry:private"]=>  *RECURSION* ["path:private"]=>  string(41) "C:\Servers\localhost\www\controllers\" } } } ["path:private"]=>  string(41) "C:\Servers\localhost\www\controllers\" } } }

  • Есть возможность отключить вывод отладочной информации вместо того, чтобы вычищать её по всему коду.
  • Быстрый и наглядный доступ к данным о функциях, классах и т.д.



--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
MuToGeN
Дата 14.7.2008, 03:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 4
Всего: 32



HackMan, попробуйте поюзать Zend Debugger. Чувствую, что откроете для себя много нового.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
phpdeveloper
Дата 14.7.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.7.2008

Репутация: нет
Всего: нет



function var_name(&$var, $scope=0)
{
    $old = $var;
    if (($key = array_search($var = 'unique'.rand().'value', !$scope ? $GLOBALS : $scope)) && ($var = $old || true)) return $key; 
}

или http://www.php.net/manual/en/language.variables.php#49997

Это сообщение отредактировал(а) phpdeveloper - 14.7.2008, 15:40
PM MAIL   Вверх
sTa1kEr
Дата 14.7.2008, 23:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



phpdeveloper, ужасная функция. Во первых ключи она будет возвращать по сути спонтанные, а во вторых, намного проще вторым параметром просто передавать имя сразу. Или тогда "копи-пастить" будет сложнее?

HackMan, то же самое. Почему бы вам вместо
Код

func($a); // Переменная a = data
func($b); // Переменная b = -2
func($name); // Переменная name  = 10

Не писать
Код

func($a, 'a'); // Переменная a = data
func($b, 'b'); // Переменная b = -2
func($name, 'name'); // Переменная name  = 10


Единственное, где действительно может иметь место определение имен при отладке - это в backtrace-е имена параметров функций и методов. Решается это при помощи reflection-а http://php.net/reflection

Это сообщение отредактировал(а) sTa1kEr - 14.7.2008, 23:09
PM MAIL   Вверх
theworldcreator
Дата 15.7.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

Репутация: нет
Всего: 13



Цитата

HackMan, то же самое. Почему бы вам вместо
Код

func($a); // Переменная a = data
func($b); // Переменная b = -2
func($name); // Переменная name  = 10

Не писать
Код

func($a, 'a'); // Переменная a = data
func($b, 'b'); // Переменная b = -2
func($name, 'name'); // Переменная name  = 10


Тогда уж лучше так: 
Код

function test($param){
 global $$param;
 echo $param." -> ".$$param;
}
$a = 5;
test('a');

Выводит
a -> 5
PM MAIL WWW ICQ   Вверх
sTa1kEr
Дата 15.7.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(theworldcreator @  15.7.2008,  10:45 Найти цитируемый пост)
Тогда уж лучше так:

Вы думаете у предыдущего автора параметр $scope зачем введен? Да и чем лучше? Экономия 3-х байтов кода? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.