为什么要UNSET?

dinoalex 2011-03-05 01:12:52
[code=PHP]
final class MyClass {
public $get = array();
public $post = array();
public $cookie = array();
public $files = array();
public $server = array();

public function __construct() {
$_GET = $this->clean($_GET);
$_POST = $this->clean($_POST);
$_COOKIE = $this->clean($_COOKIE);
$_FILES = $this->clean($_FILES);
$_SERVER = $this->clean($_SERVER);

$this->get = $_GET;
$this->post = $_POST;
$this->cookie = $_COOKIE;
$this->files = $_FILES;
$this->server = $_SERVER;
}

public function clean($data) {
if (is_array($data)) {
foreach ($data as $key => $value) {
unset($data[$key]);

$data[$this->clean($key)] = $this->clean($value);
}
} else {
$data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
}

return $data;
}
}
[/Code]

用echo回显了相关变量, new 一个 MyClass 后, 又回显一次, 没什么不同啊..

就是奇怪,这些网上的代码,经常性了unset一下一些全局变量.
...全文
156 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinoalex 2011-03-05
  • 打赏
  • 举报
回复
要么你们提供一个演示代码,让我研究研究.
ImN1 2011-03-05
  • 打赏
  • 举报
回复
看看手册关于变量的使用范围,写得很明白,其中就有unset的例程
nanxin3535 2011-03-05
  • 打赏
  • 举报
回复
不多余,你还没理解明白
dinoalex 2011-03-05
  • 打赏
  • 举报
回复
我想问的其实是:全局变量清了还是那个值,为什么还要清的问题.是不是显得多余?
lazyboy_wu 2011-03-05
  • 打赏
  • 举报
回复
unset()基本上就是释放的变量内存,或者下面程序中会用同名变量

在函数中,unset只能销毁局部变量,并不能销毁全局变量,特别是global引用的变量,可以尝试$GLOBALS数组

对于一些有引用的变量,可以这样得到真正的释放
$foo = null;
unset($foo);

ImN1 2011-03-05
  • 打赏
  • 举报
回复
我有个自编程序(大概循环处理本地某目录下5000+的html文档),最初php.ini配置内存limit=8M,报溢出,一直加到128M,终于可以运行完毕

然后加入几个unset,再把limit从128M减到16M,都能顺利完成(8M还是不行)……
dinoalex 2011-03-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happypiggy2010 的回复:]
取消一下可能造成下面程序混淆的变量。
[/Quote]

不是很明白.

比如$_SERVER里面的,unset之后,再回显,还是跟之前一样的内容啊~
happypiggy2010 2011-03-05
  • 打赏
  • 举报
回复
取消一下可能造成下面程序混淆的变量。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧