Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Динамическое имя переменной

#php


$field = 'mailbox';
$default_{$field} = 'abc';

print($default_{'mailbox'});//выводит abc
print($default_mailbox);//Ничего не выводит

P.S. Я уже "вспомнил" про массивы. Но что за такое происходит с именами переменных?    


Ответы

Ответ 1



Может быть такой вариант Вам подойдет: $field = 'mailbox'; ${'default_'.$field} = 'abc'; print($default_mailbox);

Ответ 2



Странно зачем в print передавать аргумент переменной $field какой смысл в переменной то тогда? Переменные, одно слово определяет их суть они должны меняться или быть частью логики вставляться в код станиц и т.д! Менять аргументы переменных возможно от условий описаных в чем-то: цикл, условие, функции и т.д или же присваивать не статическое значение переменной.Для чего переменная если $field статично присвоено mailbox (тем более что это просто строка) и оно же передается в название переменной второй $default_mailbox.Господа где логическая часть выражения??Как аргумент переменной $field будет меняться, при каком условии?Если переменная $field статична значит должна меняться тогда вторая часть названия переменной $default_mailbox иначе смыл переменных теряет свое значение!$default['mailbox'] это выражение так же не имеет смысла если вы используете ключ массива то он должен перебираться каким то циклом например foreach на ключи и аргументы и в переменную передаваться $key иначе нет логики в самом массиве!!

Ответ 3



Странно, что за 5 лет никто так и не ответил, что это одна из возможностей обращения к элементу массива в PHP. RTFM: http://php.net/manual/en/language.types.array.php – находим секцию Note с таким содержанием: Both square brackets and curly braces can be used interchangeably for accessing array elements (e.g. $array[42] and $array{42} will both do the same thing in the example above). А это значит, что следущие две конструкции эквивалентны: $default_{$field} = 'abc'; $default_[$field] = 'abc'; // то же самое Добро пожаловать в мир PHP.

Комментариев нет:

Отправить комментарий