关于php unset函数的问题

Posted

技术标签:

【中文标题】关于php unset函数的问题【英文标题】:Questions about php unset function 【发布时间】:2011-09-08 05:59:01 【问题描述】:

我对@9​​87654321@ 有疑问

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

谢谢

【问题讨论】:

很少有你真的需要使用unset,或者通过使用它来获得任何东西。也许您应该发布您认为会从中受益的代码。 【参考方案1】:

    你的意思是unset($var1,$var2,$var3,...)对你来说还不够简单?

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

    不知道。

【讨论】:

如果我想取消设置 50 个变量。现在很容易。 @gowri:为什么一开始要取消设置 50 个变量? 我不得不在同一页面中使用相同变量名的代码部分。我只是想确保不会过度纠正。我听说,这很糟糕,所以只有这个问题才能提出。【参考方案2】:

如何取消设置所有变量。我应该使用 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);

【讨论】:

【参考方案3】:

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

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

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

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

在函数结束时取消设置变量是个好习惯?有什么不同!

不,变量超出范围时会自动取消设置。手动操作没有意义。

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

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

【讨论】:

以上是关于关于php unset函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

php 关于intval函数!

PHP 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别

PHP中的垃圾回收相关函数

PHP - unset 函数在我的代码之前取消设置我的 var

php的魔术方法

PHP unset()函数销毁变量 但没有实现释放内存