Страницы

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

понедельник, 3 февраля 2020 г.

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

#php


foreach($_POST as $key => $value){
    $$key = mysql_real_escape_string($value, $base_connection);
}


Интересует именно вот этот момент - $$key.  Просмотрел документацию, но толком не
понял. Чем удобна такая конструкция $$переменная и когда ее следует использовать?
    


Ответы

Ответ 1



Документация - переменные переменных В цикле создается переменная, имя которой есть ключ массива. Пример: $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].

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

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