关于php未设置功能的问题

时间:2011-06-04 04:40:11

标签: php function unset

我对unset

有疑问
  1. 如何取消设置所有变量。我应该使用unset($var1,$var2,$var3,...)还是其他任何简单方法?
  2. 在功能结束时取消变量是好习惯吗?。差异!
  3. 取消变量是reduce编程execution time还是不?
  4. 由于

3 个答案:

答案 0 :(得分:3)

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

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

  3. 不知道。

答案 1 :(得分: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);

答案 2 :(得分:0)

首先,unset是一种语言结构,而不是一种功能。

  

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

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

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

在函数末尾取消变量是一种很好的做法?。差异化!

不,当变量超出范围时,变量会自动取消设置。没有必要手动完成。

  

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

实际上,可能会减少内存使用量。

相关问题