在PHP中将变量名传递给unset函数

在PHP中将变量名传递给unset函数,php,unset,Php,Unset,我有一段代码: <?php $a = "dog"; $b = "cat"; $c = "pig"; $params = array($a, $b, $c); some_function($params); unset($a, $b, $c); //echo "<br>".$a."<br>".$b."<br>".$c; ?> 而不是 unset($a, $b, $c); 感谢您的帮助。唯一的方法是定义变量名而不是变量值,并在$

我有一段代码:

<?php

$a = "dog";
$b = "cat";
$c = "pig";

$params = array($a, $b, $c);

some_function($params);

unset($a, $b, $c);

//echo "<br>".$a."<br>".$b."<br>".$c;

?>
而不是

unset($a, $b, $c);    

感谢您的帮助。

唯一的方法是定义变量名而不是变量值,并在$GLOBALS中取消设置它们:

<?php

$a = "dog";
$b = "cat";
$c = "pig";
$myvar = 'another var';

$params = array('a', 'b', 'c', 'myvar');

myunset($params);

function myunset($params){
 foreach($params as $v){
  unset($GLOBALS[$v]);
 }
}

var_dump($myvar); //NULL
?>

唯一的方法是定义变量名而不是变量值,并在$GLOBALS中取消设置它们:

<?php

$a = "dog";
$b = "cat";
$c = "pig";
$myvar = 'another var';

$params = array('a', 'b', 'c', 'myvar');

myunset($params);

function myunset($params){
 foreach($params as $v){
  unset($GLOBALS[$v]);
 }
}

var_dump($myvar); //NULL
?>


AFAIK,你不能。您总是可以创建一个自定义的
unset
函数比创建一个参数数组然后取消设置它更优雅。所以坚持下去。好的,谢谢。这不是一个大项目,所以我不会创建自定义unset函数并使用unset($a,$b,$c)。。。听起来像是设计上的缺陷。你为什么要取消它们?好吧,你不能。您总是可以创建一个自定义的
unset
函数比创建一个参数数组然后取消设置它更优雅。所以坚持下去。好的,谢谢。这不是一个大项目,所以我不会创建自定义unset函数并使用unset($a,$b,$c)。。。听起来像是一个设计缺陷。为什么需要取消设置?变量可能不在全局范围内定义。@zerkms:那么我们不需要取消设置它们,比如在函数内定义的变量,那么为什么需要取消设置在全局范围内定义的变量呢?就因为我们可以?还是有真正的技术原因?“有人”(OP)没有提到变量范围。我刚才提到,如果您的解决方案试图应用于函数范围中定义的变量,它将损坏不相关的数据。你对OP如何使用它一无所知,“那么我们就不需要取消设置”与“我提供了一种方法”并不相关。您提供了一种适用于某些任务子集的方法,就是这样。@vetrnicek:它没有解释为什么需要
取消设置它们。您可以为变量赋值两次,而不必取消设置
变量可能不在全局范围内定义。@zerkms:那么我们就不需要取消设置它们,比如在函数内定义的变量,那么为什么我们需要取消设置在全局范围内定义的变量呢?就因为我们可以?还是有真正的技术原因?“有人”(OP)没有提到变量范围。我刚才提到,如果您的解决方案试图应用于函数范围中定义的变量,它将损坏不相关的数据。你对OP如何使用它一无所知,“那么我们就不需要取消设置”与“我提供了一种方法”并不相关。您提供了一种适用于某些任务子集的方法,就是这样。@vetrnicek:它没有解释为什么需要
取消设置它们。您可以为变量赋值两次,而无需取消设置