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]
Комментариев нет:
Отправить комментарий