我应该在函数内部使用 unset 吗?
Should i use unset inside a function?
取消设置 $data
有什么用吗?如果它包含大量数据,我应该取消设置吗?
<?php
require 'db.php';
class Test{
public $id = 0;
public $name;
public function __construct()
{
$this->getUserInfo();
echo $this->name;
}
private function getUserInfo()
{
global $db;
$query = $db->prepare('SELECT id,name FROM users WHERE group = :g LIMIT 1');
if ($query->execute(array('g' => 'admin')))
{
$data = $query->fetch(); // <--
$this->id = $data[0];
$this->name = $data[1];
return true;
}
}
}
(new Test);
?>
没必要。当函数returns时,变量自行消失
即使您取消设置它,您仍然可以引用它包含在 $this->id
和 $this->name
中的值,因此它们的内存不会被回收。您将回收的唯一内存是指向它们的微型数组对象。
PHP 在你做作业时不会复制。字符串和数字是不可变的,因此无需复制它们。对象通过引用复制。并且数组使用 copy-on-write 技术,所以它只会在旧引用仍然存在的情况下复制它们,然后您修改副本。
取消设置 $data
有什么用吗?如果它包含大量数据,我应该取消设置吗?
<?php
require 'db.php';
class Test{
public $id = 0;
public $name;
public function __construct()
{
$this->getUserInfo();
echo $this->name;
}
private function getUserInfo()
{
global $db;
$query = $db->prepare('SELECT id,name FROM users WHERE group = :g LIMIT 1');
if ($query->execute(array('g' => 'admin')))
{
$data = $query->fetch(); // <--
$this->id = $data[0];
$this->name = $data[1];
return true;
}
}
}
(new Test);
?>
没必要。当函数returns时,变量自行消失
即使您取消设置它,您仍然可以引用它包含在 $this->id
和 $this->name
中的值,因此它们的内存不会被回收。您将回收的唯一内存是指向它们的微型数组对象。
PHP 在你做作业时不会复制。字符串和数字是不可变的,因此无需复制它们。对象通过引用复制。并且数组使用 copy-on-write 技术,所以它只会在旧引用仍然存在的情况下复制它们,然后您修改副本。