Страницы

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

воскресенье, 7 апреля 2019 г.

Чем удобна конструкция $$переменная и когда ее следует использовать?

foreach($_POST as $key => $value){ $$key = mysql_real_escape_string($value, $base_connection); }
Интересует именно вот этот момент - $$key. Просмотрел документацию, но толком не понял. Чем удобна такая конструкция $$переменная и когда ее следует использовать?


Ответ

Документация - переменные переменных
В цикле создается переменная, имя которой есть ключ массива.
Пример:
$arr = array("name1"=>'test1',"name2"=>'test2',"name3"=>'test3'); foreach($arr as $key => $value){ $$key = mysql_real_escape_string($value, $base_connection); // строка выше пропускает $value через mysql_real_escape_string // и присваивает полученное(экранированное) значение $value переменной с именем // ключа массива (в Вашем примере массивом выступает массив $_POST); echo "$$key = '$value';"; }
В результате мы получим:
$name1 = 'test1'; $name2 = 'test2'; $name3 = 'test3';
UPD:
Чем удобно?
Это существенно упрощает работу с кодом(еще одна формулировка "создание переменных на лету"). Т.е. Вы динамически можете создавать различные переменные. Полный пример описан в документации.
Когда не нужно использовать?
1) Когда возможно перекрытие значений и Вы не проверяете создаваемую переменную. Самый простой пример, когда приходят массивы $_POST ил $_GET и Вы сразу же записываете значение переменной.
Пример:
$name1 = 'dima'; $arr = array("name1"=>'alexey'); foreach($arr as $key => $value){ $$key = mysql_real_escape_string($value, $base_connection); } echo $name1; //Выведет 'alexey', т.к. в цикле переменной `$name1` будет присвоено значение `alexey`
Решение - прежде, чем записывать значение, проверять имя переменной на валидность или существование.
2) Если не решена проблема двусмысленности. То есть, если вы напишете $$a[1], обработчику необходимо знать, хотите ли вы использовать $a[1] в качестве переменной, либо вам нужна как переменная $$a, а затем ее индекс [1]
Решение - использовать синтаксис для разрешения двусмысленности: ${$a[1]} если Вы желаете использовать $a[1] в качестве переменной и ${$a}[1] если Вам нужна переменная $$a, а затем ее индекс [1]

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

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