туплю с переменными переменными в PHP - помогите?

V
На сайте с 22.09.2006
Offline
103
662

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

вот такой код получился рабочим:

$a = 'abc';

$d = 'def';
$name=$a.$d;//можно ли исключить эту строку?
$$name = 'test working'; //как правильно написать эту строку?
echo $abcdef;

все попытки найти синтаксис для более короткой записи не удаются, нужно что-то типа

$abc$d = 'test working';

без использования промежуточной $name

.
n0name
На сайте с 22.12.2006
Offline
54
#1


$a = 'abc';
$d = 'def';
eval('$' . $a . $d . ' = "test";');
echo $abcdef;
Сервис сравнения цена на VPS (http://vpska.com/)
Dreammaker
На сайте с 20.04.2006
Offline
570
#2
n0name:
eval

вредная привычка совать eval направо и налево.

vantala:
найти синтаксис для более короткой записи

зачастую такие попытки - это чисто психологическая попытка отлынить от написания чего-то более серъёзного в ближайшее время :)

Но если уж очень нужно, то вот:


<?php

$a = 'a';
$b = 'b';
$ab = '123';

echo ${$a.$b};

?>
V
На сайте с 22.09.2006
Offline
103
#3

Dreammaker, ваш вариант красивый, но работать не будет, потому что в нем у вас предполагаются не переменные $a $b а константы.

Dreammaker
На сайте с 20.04.2006
Offline
570
#4

потер, понял задачу. Попробую проверить.

p.s. Кажется это у вас предполагаются константы, а у меня как раз переменные :)

p.p.s. Напишите кусок кода, который у вас не работает, но который вы хотели бы чтобы заработал. Потому, что пытаясь показать по аналогии вы больше запутываете.

wwwwww
На сайте с 29.04.2011
Offline
195
#5

Чем массив плох?

Видишь? Свободная подпись.
dkameleon
На сайте с 09.12.2005
Offline
386
#6

Хм.... а по-моему Dreammaker нормально написал. Из его подсказки можно получить решение при желании:

$a = 'abc';
$d = 'def';
${"$a$d"} = 'test working';
echo $abcdef;
Дизайн интерьера (http://balabukha.com/)
V
На сайте с 22.09.2006
Offline
103
#7

dkameleon, спасибо, именно до

${"$a$d"} = 'test working';

я и не мог дотумкать :)

wwwwww, массив длиннее получится в дальнейшей записи в коде, я пока уже через него и переделал. Просто когда что-то не получается, а должно - это непорядок, это надо учить!

n0name, за идею спасибо, но напомню то что сказал Rasmus Lerdorf:

"Если решением является eval(), почти наверняка задача сформулирована неверно."

eval() вызывает повторную перекомпиляцию всего кода, в цикле это приведет к многократному увеличению времени выполнения скрипта.

siv1987
На сайте с 02.04.2009
Offline
427
#8

Этот не тот ли юзверь с "производительным кодом", который оценивает его по количество строк, и все старается запихнуть в одну?

vantala:
wwwwww, массив длиннее получится в дальнейшей записи в коде, я пока уже через него и переделал. Просто когда что-то не получается, а должно - это непорядок, это надо учить!

Бред. Пишите через массивы и не майтесь ерундой.

n0name
На сайте с 22.12.2006
Offline
54
#9

vantala, в том-то и дело, что задача сформулирована неверно.

А решить её через eval или как предложил Dreammaker, по сути, без разницы — всё равно решение будет кривым и непонятным.

V
На сайте с 22.09.2006
Offline
103
#10
n0name:
решить её через eval или как предложил Dreammaker, по сути, без разницы — всё равно решение будет кривым и непонятным.

Полностью с Вами согласен.

Именно поэтому предпочитаю решение, которое предложил dkameleon.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий