Можете ли вы получить имя переменной в виде строки в PHP? (А ты должен?) - PullRequest
1 голос
/ 15 ноября 2010

Допустим, у вас есть несколько больших массивов переменных (которые обычно являются строками), и вы хотите изменить способ их отображения на определенных страницах - например, объединяя каждую из них с $prefix и $suffix:

$arr = array($foo, $bar, $baz)

$foo_display = $prefix . $foo . $suffix
$bar_display = $prefix . $bar . $suffix
$baz_display = $prefix . $baz . $suffix

Как бы вам не пришлось выполнять все эти задания вручную? Я изначально предполагал, что будет какая-то функция, которая будет возвращать имя переменной в виде строки (назовите ее «varname ()»), и в этом случае код может выглядеть следующим образом:

foreach ($arr as &$value) {
    ${varname($value)."_display"} = $prefix . $value . $suffix
}

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

PS: я новичок в программировании, извините, если это глупый вопрос:)

Ответы [ 3 ]

4 голосов
/ 15 ноября 2010

Есть множество проблем с тем, что вы хотите сделать. Например, имя переменной недоступно. Код $arr = array($foo, $bar, $baz) создает массив со значениями из $foo и т. Д. Если вы затем изменили значение $foo, значение $arr[0] все равно будет старым значение $foo, поэтому даже не ясно, что означало бы иметь доступ к имени переменной.

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

Конечно, все это легко решить, если у вас есть ассоциативный массив. Например:

$arr = array('Foo' => $foo, 'Bar' => $bar, 'Baz' => $baz)

Это можно легко изменить, чтобы произвести то, что вы хотите. Например:

$display = array();
foreach($arr as $key => $value) 
   $display[$key] = $prefix . $value . $suffix;
0 голосов
/ 15 ноября 2010

Хотя можно получить имя переменной из массива $ GLOBALS, итерация по парам переменная-значение не имеет большого смысла, если вы в любом случае можете создать свой собственный ассоциативный массив для отслеживания этих пар переменная-значение. И если бы у вас было два или более экземпляра $ value с одинаковым содержимым, как бы вы ожидали, что программа будет отслеживать имя переменной через самоанализ? Это может скоро стать большим беспорядком.

Вы должны следить за этим в коде самостоятельно.

0 голосов
/ 15 ноября 2010

Мне понадобится более подробный пример того, что вы пытаетесь выполнить, но я бы дал вам руководство, чтобы посмотреть, как PHP обрабатывает пары ключ / значение:

http://php.net/manual/en/language.types.array.php

Таким образом, вы можете получить доступ к своим массивам следующим образом:

foreach ($valsArr as $key => $val) {
    $displayX = $prefix.$superArr[$key.'_display'].$suffix;
}

Это должно быть адаптировано к вашим конкретным структурам / сопоставлениям. Путь к попыткам использовать имена переменных для любых отображений будет непростым.

...