2017-01-18 6 views
1

Есть ли какая-либо цель для отмены $data? Должен ли я отключить его, если он содержит большие данные?Должен ли я использовать функцию unset внутри функции?

<?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); 
?> 
+0

Теперь вы не использовали версию wp php. Но иногда в некоторых версиях php локальные переменные arent очищаются с помощью сборщика grabage, поэтому, если вы хотите быть уверенным, что '$ data = null; unset ($ data);'. – JustOnUnderMillions

+0

Вот много чего почитать по этой теме: http://stackoverflow.com/questions/2461762/force-freeing-memory-in-php также читайте комментарий, чтобы получить обзор. – JustOnUnderMillions

+0

@JustOnUnderMillions Спасибо, я использую PHP 7.0.9. Я думаю, что это правильно очистит. – Tufan

ответ

2

Нет необходимости. Когда функция возвращается, переменная уходит сама собой.

И даже если вы его отменили, у вас все еще есть ссылки на значения, содержащиеся в $this->id и $this->name, поэтому их память не будет восстановлена. Единственная память, которую вы восстановите, - это крошечный объект массива, который указывает на них.

PHP не делает копии при выполнении заданий. Строки и числа неизменяемы, поэтому их не нужно копировать. Объекты копируются по ссылке. А массивы используют технологию копирования на запись, поэтому она копирует их позже, если старая ссылка все еще существует, и вы затем изменяете копию.

+0

Чтобы понять это, '$ this-> id = trim ($ data [0]);' предотвращает ссылку в этот момент? – JustOnUnderMillions

+0

Да, потому что это создает новую строку. – Barmar

+0

Итак, мы можем сказать, что 'everthing' является ссылкой в ​​php, поскольку вы не меняете содержимое/значение новой переменной. Не было бы немного заставки сделать что-то вроде '$ data = null?', Чтобы предотвратить рефренсы ссылок в сложных кодах !? – JustOnUnderMillions