在PHP中,是否可以使用字符串设置变量名称?

时间:2015-08-20 16:49:17

标签: php algorithm design-patterns optimization

我有一段像

这样的代码
$id = $_POST['id'];
$name = $_POST['name'];
$story = $_POST['story'];
$imgurl = $_POST['imgurl'];
$thisAction = $_POST['thisAction'];

如您所见,我使用的变量名称等于$_POST数组的键。是否有可能通过循环完成上述操作?

1 个答案:

答案 0 :(得分:2)

是的,可以使用variable variables

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

或使用extract

extract($_POST);

但请注意这样做会带来潜在的安全漏洞

实际上就像simulating PHP's register_globals directive, which introduces lots of security issues.

您可以分配$_POST变量的子集,这是一种更安全的方式:

$keys = array('id', 'name', 'story', 'imgurl', 'thisAction');
foreach($keys as $key) {
    $$key = $_POST[$key];
}

或使用extract

$whitelisted = array_intersect_key($_POST, array('id', 'name', 'story', 'imgurl', 'thisAction')); 
extract($whitelisted);