在 PHP 7 中取消设置所有变量

Posted

技术标签:

【中文标题】在 PHP 7 中取消设置所有变量【英文标题】:Unset all variables in PHP 7 【发布时间】:2017-11-14 05:16:33 【问题描述】:

我在 php 5.5.9 中使用以下脚本来取消设置所有变量,效果很好

$vars = array_keys(get_defined_vars());
for ($i = 0; $i < sizeOf($vars); $i++) 
    unset($$vars[$i]);  //this is line 72

unset($vars,$i);

然而,在 PHP 7 中,它们给出了以下消息:

PHP Notice:  Array to string conversion in /root/script.php on line 72
PHP Notice:  Undefined variable: Array in /root/script.php on line 72

我的问题是如何使脚本在 PHP 7 中工作?

感谢您的任何建议!

【问题讨论】:

【参考方案1】:

您可以通过使用foreach 而不是for 来避免这些错误。

$vars = array_keys(get_defined_vars());
foreach ($vars as $var) 
    unset($$var);

unset($vars, $var);

$$vars[$i] 的求值顺序是different in PHP 7。它现在严格从左到右。

以前它会首先评估$vars[$i],然后根据$的结果形成一个新变量。

现在它首先评估$$vars,然后尝试在结果中找到[$i]

【讨论】:

您的代码有效。感谢您的解释,这对我很有用,因为我刚刚升级了服务器并且不知道这一点。我已经更新了问题中的php版本。

以上是关于在 PHP 7 中取消设置所有变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP函数中使用的变量会在函数执行后自动取消设置吗?

为啥不会/如何对 PHP 会话变量进行排序而不是取消设置

从当前函数中取消设置所有定义的变量

PHP Drupal - 取消设置(不包括)所有核心样式表 - 主题变量覆盖。

PHP 类取消设置/清除私有数组变量

“header()” php 函数是不是取消设置全局变量?