【问题标题】:Passing variable names into unset function in PHP将变量名传递给 PHP 中的未设置函数
【发布时间】:2013-04-14 08:41:42
【问题描述】:

我有这段代码:

<?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 函数?比如:

unset($params); //but this doesn't work

代替

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

感谢您的帮助。

【问题讨论】:

  • AFAIK,你不能。您始终可以创建自定义 unset 函数。
  • 我认为unset($a, $b, $c); 比创建参数数组然后取消设置更优雅。所以坚持下去。
  • 好的,谢谢。这不是大项目,所以我不会创建自定义 unset 函数并使用 unset($a, $b, $c)。
  • 很多参数...对我来说听起来像是设计缺陷。
  • 为什么需要取消设置?

标签: php unset


【解决方案1】:

唯一的方法是定义变量名而不是变量值,并在 $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
?>

【讨论】:

  • 变量的定义可能不在全局范围内。
  • @zerkms: 那么我们就不需要取消设置它们了,比如函数内部定义的变量,
  • 那么为什么我们需要取消设置在全局范围内定义的变量呢?就因为我们可以?还是有真正的技术原因?
  • "someone" (OP) 对变量范围只字未提。我刚刚提到,如果尝试将其应用于函数范围中定义的变量,您的解决方案将损坏不相关的数据。您对 OP 想要如何使用它一无所知,并且“然后我们不需要取消设置”与“我提供了一种方法”并没有很好的相关性。您提供了一种适用于某些任务子集的方法,就是这样。
  • @vetrnicek:它没有解释为什么你需要unset他们。您可以在没有unset 的情况下为变量赋值两次
猜你喜欢
  • 2011-07-29
  • 2015-12-17
  • 2011-09-27
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
相关资源
最近更新 更多