3

我有关于unset

  1. 如何取消设置所有变量。我应该使用unset($var1,$var2,$var3,...)还是存在任何其他简单的方法?
  2. 在函数末尾取消设置变量是一种好习惯?有什么区别!
  3. 取消设置变量是否会reduce编程execution time

谢谢

4

3 回答 3

4
  1. 你的意思unset($var1,$var2,$var3,...)是对你来说还不够容易吗?

  2. 明确地这样做是没有意义的,因为局部变量总是会在函数作用域的末尾消失。这也适用于引用变量,只有函数本地的引用会消失,但无论它们引用什么,如果在函数范围之外,仍然会存在。

  3. 不知道。

于 2011-06-04T04:41:56.740 回答
1

如何取消设置所有变量。我应该使用 unset($var1,$var2,$var3,...) 还是存在任何其他简单的方法?

是的,这是取消设置多个变量的正常方法。您可以迭代范围内的变量并取消设置,但这将是矫枉过正。

在函数末尾取消设置变量是一种好习惯?有什么区别!

虽然变量将在作用域(函数、类、脚本)的末尾被垃圾收集,但在单文件脚本(过程)中执行此操作可能很有用——尤其是在其他脚本任意包含在作用域中的脚本中。

话虽这么说,但组织干净,这是不必要的;但是,也不一定是坏事。

取消设置变量是否会减少编程执行时间?

在大多数情况下,几乎没有区别;但是,正如我之前提到的,它不会受到伤害,并且可能会为范围内/不在范围内的内容带来一些明确性。事实上,我通常在 for/foreach 之后立即执行此操作,因为 for/foreach 没有块范围,因此在这些块中定义的变量在循环之后可用。

例子:

foreach ($doctors as $key => $val) {
    // do something
}
unset($key, $val);

顺便说一句,如果您想知道如何批量实际执行此操作(是的,有可能,但它并不漂亮):

<?php

$_SCRIPT_one   = 1;
$_SCRIPT_two   = 2;
$_SCRIPT_three = 3;

// list of all variables defined
$all   = array_keys(get_defined_vars());

// list only the local variables we are interested in
$local = array_filter($all, function($name) { return preg_match('/^_SCRIPT_/i', $name); });

// dump currently scoped local variables
var_dump($local);


// unset local variables
foreach ($local as $var) { unset($$var); }


// list of all variables defined
$all   = array_keys(get_defined_vars());

// list only the local variables we are interested in
$local = array_filter($all, function($name) { return preg_match('/^_SCRIPT_/i', $name); });

// dump currently scoped local variables
var_dump($local);
于 2011-06-04T04:48:06.493 回答
0

首先,unset是语言结构,而不是函数。

如何取消设置所有变量。我应该使用 unset($var1,$var2,$var3,...) 还是存在任何其他简单的方法?

您可以取消设置所有全局变量,但是,我不明白您为什么要这样做:

foreach (array_keys($GLOBALS) as $var) {
   if ($var != 'GLOBALS') unset($GLOBALS[$var]);
}

在函数末尾取消设置变量是一种好习惯?有什么区别!

不,变量超出范围时会自动取消设置。手动进行是没有意义的。

取消设置变量是否会减少编程执行时间?

并非如此,但它可能会减少内存使用量。

于 2011-06-04T04:45:42.087 回答