从数组动态创建变量以读取 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';
}