从数组动态创建变量以读取 php 中的 $_GET 方法是不好的做法吗
Is it bad practice to dynamically create a variable from array to read a $_GET method in php
在工作中浏览 php class 文件时,我发现了一个有趣的片段。该脚本正在动态创建一个变量,动态检查它正在创建的变量是否有活动的 $_GET[''] ,如果有它正在加载 $_GET 数据,如果没有它正在将 N/A 写入变量它是动态创建的。然后脚本继续使用相同逻辑的开关函数来区分大小写。
1.) 这样安全吗?
2.) 能否被攻击?
3.) 有更简单的方法吗?
4.) 你为什么要这样做?
$switch_types = array("id","type","page");
foreach ($switch_types as $key => $value) {
$$value = $value;
if(isset($_GET[$$value])){
$$value = $_GET[$$value];
}
else{
$$value = "N/A";
}
}
这基本上就是啰嗦的写法:
$id = isset($_GET['id']) ? $_GET['id'] : 'N/A';
$type = isset($_GET['type']) ? $_GET['type'] : 'N/A';
$page = isset($_GET['page']) ? $_GET['page'] : 'N/A';
这是非常安全的,因为要分配的变量列表是在程序中指定的,它不是来自客户端动态的。
他的循环中有一些不必要的代码 -- $$value = $value
不需要。可以简化为:
foreach ($switch_types as $value) {
if(isset($_GET[$value])){
$$value = $_GET[$value];
}
else{
$$value = "N/A";
}
}
或:
foreach ($switch_types as $value) {
$$value = isset($_GET[$value]) ? $_GET[$value] : 'N/A';
}
在工作中浏览 php class 文件时,我发现了一个有趣的片段。该脚本正在动态创建一个变量,动态检查它正在创建的变量是否有活动的 $_GET[''] ,如果有它正在加载 $_GET 数据,如果没有它正在将 N/A 写入变量它是动态创建的。然后脚本继续使用相同逻辑的开关函数来区分大小写。
1.) 这样安全吗?
2.) 能否被攻击?
3.) 有更简单的方法吗?
4.) 你为什么要这样做?
$switch_types = array("id","type","page");
foreach ($switch_types as $key => $value) {
$$value = $value;
if(isset($_GET[$$value])){
$$value = $_GET[$$value];
}
else{
$$value = "N/A";
}
}
这基本上就是啰嗦的写法:
$id = isset($_GET['id']) ? $_GET['id'] : 'N/A';
$type = isset($_GET['type']) ? $_GET['type'] : 'N/A';
$page = isset($_GET['page']) ? $_GET['page'] : 'N/A';
这是非常安全的,因为要分配的变量列表是在程序中指定的,它不是来自客户端动态的。
他的循环中有一些不必要的代码 -- $$value = $value
不需要。可以简化为:
foreach ($switch_types as $value) {
if(isset($_GET[$value])){
$$value = $_GET[$value];
}
else{
$$value = "N/A";
}
}
或:
foreach ($switch_types as $value) {
$$value = isset($_GET[$value]) ? $_GET[$value] : 'N/A';
}