关于php unset函数的问题
Posted
技术标签:
【中文标题】关于php unset函数的问题【英文标题】:Questions about php unset function 【发布时间】:2011-09-08 05:59:01 【问题描述】:我对@987654321@ 有疑问
-
如何取消设置所有变量。我应该使用
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 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别