【发布时间】:2017-10-06 07:10:31
【问题描述】:
根据关于 unset() 函数的 PHP 文档:
函数内部的 unset() 行为可能会根据您尝试销毁的变量类型而有所不同。 如果一个全局变量在函数内部是 unset() ,则只有局部变量被销毁。调用环境中的变量将保持与调用 unset() 之前相同的值。
上面演示的代码示例如下:
<?php
function destroy_foo()
{
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo; // o/p is bar
?>
现在我的问题是为什么上述行为不适用于我编写的以下程序?
<?php
function increment_foo()
{
global $foo;
$foo++;
}
$foo = 36;
increment_foo();
echo $foo; // o/p is 37
?>
我的疑问是为什么上面代码中的行为与为unset() 函数编写的代码中的行为不同?
换句话说,我想知道在第一个代码中unset() 功能仍然仅限于函数内部的局部变量,它不会更改函数外部全局范围内的值,而是在我一直在的代码中编写增量功能也会更改全局变量范围内的值。在我的代码中,为什么它不仅限于函数内部的局部变量,也不会改变值/影响函数外部的变量?
谢谢。
【问题讨论】:
-
似乎是范围问题
-
这就是它的工作方式和记录方式。除此之外,这对我来说似乎很合乎逻辑:它就像对全局变量的引用,所以取消它,取消设置引用并修改它会改变全局变量。真正的问题是为什么要使用全局变量 ;-)
标签: php function scope global-variables superglobals