unset
unset() удаляет перечисленные переменные.
Поведение unset() внутри пользовательской функции может отличаться, в зависимости от того, какой тип имеет переменная, которую необходимо удалить.
Если переменная, объявленная глобальной, удаляется внутри функции, то будет удалена только локальная переменная. Переменная в области видимости вызова функции сохранит то же значение, что и до вызова unset() .
$foo = ‘bar’ ;
destroy_foo ();
echo $foo ;
?>
Результат выполнения данного примера:
Если необходимо удалить глобальную переменную внутри функции, то для этого нужно использовать массив $GLOBALS :
Если переменная, которая передается ПО ССЫЛКЕ, удаляется внутри функции, то будет удалена только локальная переменная. Переменная в области видимости вызова функции сохранит то же значение, что и до вызова unset() .
$bar = ‘something’ ;
echo » $bar \n» ;
Результат выполнения данного примера:
something something
Если статическая переменная удаляется внутри функции, unset() удалит переменную только в контексте дальнейшего выполнения функции. При последующем вызове предыдущее значение переменной будет восстановлено.
function foo ()
static $bar ;
$bar ++;
echo «До удаления: $bar , » ;
unset( $bar );
$bar = 23 ;
echo «После удаления: $bar \n» ;
>
?php
Результат выполнения данного примера:
До удаления: 1, После удаления: 23 До удаления: 2, После удаления: 23 До удаления: 3, После удаления: 23
Удаление переменных в PHP
@Shamanis: «Похоже на Paranoid Style Coding» Да, есть немного) Garbage Collector — запускаешь его в начале, после в конце запускаешь gc_disable() и весь мусор удаляется? Но нужно ли это? Наверно это нужно скорее для PHP win32 оконных приложенй, чтобы оперативку не зассорять?
28 дек 2011 в 12:24
PHP win32 оконных приложенй? хв
28 дек 2011 в 13:24
Ну да, по-мему PHP GUI называется. Ни разу не делал для винды приложений на php?
28 дек 2011 в 17:28
Судя по примеру вопрос из раздела теоретичесих, соответственно есть неплохая статья на эту тему: [Работа с памятью (и всё же она есть)][1] [1]:habrahabr.ru/blogs/php/134784
29 дек 2011 в 4:34
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Все зависит от того, что вы делаете дальше и делали до этого. Если создается простенький объект (или переменная) — то смысл ее уничтожать? Сборщик мусора сделает все сам. Если же создаете объемный объект сейчас и далее планируете также что-то громоздкое создавать (например в цикле) и при этом боитесь, что память ваша станет девичьей (девушки извините, сам этим страдаю), то тогда можно и сборщик вызвать. Подробнее можешь про деструкторы прочитать. Пишут о них мало, т.к. они редко используются, но вдруг это именно тот случай?))
Отслеживать
ответ дан 28 дек 2011 в 12:41
4,855 2 2 золотых знака 25 25 серебряных знаков 51 51 бронзовый знак
Еще, если эта переменная используется в каком-то участке кода, который представляет из себя отдельный логический блок, этот блок можно оформить в виде функции со своими локальными переменными.
Когда функция отработает, все ее локальные переменные освободят память.
Отслеживать
ответ дан 28 дек 2011 в 13:53
8,170 19 19 серебряных знаков 28 28 бронзовых знаков
Чистить нужно только в том случае, если переменная объёмом содержащейся в ней информации превышает 100кб и более, хотя тут уже на ваш выбор, я же из личного опыта. Бывает так, что во время исполнения скрипт может кушать и 300кб, а то и по 2мб. А вот ваш код можно упростить :
echo date("d.m.Y");
Если полученная дата больше нигде не понадобится.
unset – удаление переменной [Функция PHP]
Функция unset позволяет удалить / разрушить переменную.
Для проверки переменной после использования данной функции необходимо использовать isset. После использования unset переменная при проверки isset будет возвращать FALSE.
Возможно удалять несколько переменных сразу.
Синтаксис
переменная — переменная, массив или элемент массива
Результат:
Не возвращает успешность выполненния функции.
Пример
Удаляем одну переменную и проверяем ее
$a="asd"; unset ($a); echo $a; if (isset ($a)) if (!empty ($a)) //Результат: // // Нет значения
Удаляем элемент массива
unset ($a['1']);
Удаляем несколько переменных
$a="1"; $b="14"; unset ($a, $b);
Курсы javascript
на сайте с помощью ajax загружаются остальные страницы.
Соответственно js код тоже новый подгружается.
Проблема в том что когда модули заменяются друг на друга, то js переменные висят в памяти от старого модуля.
Как сделать что бы их как буд-то и не было ? удалить полностью, функции, переменные и т.п. весь js код загруженный ранее на странице.
17.11.2011, 21:32
Регистрация: 04.02.2011
Сообщений: 1,815
Удаляем обьекты в java script при помощи delete
// создадим переменную var hello=100; // проверим доступ к переменной, должно быть всё нормуль. alert (hello); // удаляем переменную delete hello; // эта строка выдаст ошибку, потому что переменную hello мы удалили alert (hello);
Практично обьединить весь код страницы в один обьект к примеру page, чтобы удалить его разом.
Можно обойтись и без удаления, просто перезаписать старый обьект page, обьектом page из новой страницы.
также есть такая клёвая штука как конструкторы и деструкторы, пусть к примеру у каждой страницы будет конструктор и деструктор. Конструктор будет запускать плагины, подгружать данные, инициализировать переменный, вешать обработчики событий. А деструктор наоборот вырубать плагины, отвязывать обработчики событий, удалять глобальные обьекты (глобальные обьекты это зло . ), и тд. Открывается страница запускается конструктор, покидаешь запускается деструктор.
Естественно обьеденять и удалять всё надо самому, некакой волшебный метод за тебя эту работу делать не будет. Уборщик мусора не в счёт, он удаляет обьекты на который никто не ссылается.
Если обьект пользователю нафиг не нужен, но он к примеру в глобальной области видимости, то уборщик его никогда не тронет.
