Освобождение памяти
PHP-приложения, как и любые другие приложения, потребляют память. Кроме того, PHP потребляет память для обеспечения внутренних целей. Определенное пространство занимают данные, которые обрабатываются в приложении в основной своей массе в переменных. Обычно для выполнения PHP-приложений требуется немного памяти, поэтому не стоит беспокоиться о ее экономии. В процессе выполнения PHP-машина определяет, какие участки памяти уже не используются, чтобы отвести их под новые переменные. В конце каждого запроса PHP-машина освобождает всю используемую память с помощью специального запроса.
Большие приложения, которые используют большое количество переменных, потребляют большие блоки памяти, поэтому в этом случае экономия памяти может стать довольно насущной проблемой. В данном случае PHP требуется идентификация тех переменных, которые больше не нужны. Для того чтобы это сделать, можно воспользоваться двумя методами: присвоить переменной значение NULL или воспользоваться функцией unset.
При присвоении значения NULL переменная сама по себе остается, но она больше не ссылается на память. Для обслуживания переменной PHP использует небольшое количество памяти, но потребляемая память не является единственной проблемой. Этот подход имеет и побочный эффект, заключающийся в том, что если сценарий будет пользоваться этой переменной позднее, машина PHP не сможет предупредить программиста о том, что эта переменная не определена.
Функция unset полностью удаляет переменную из памяти. Такое решение снимает проблему нехватки памяти. Кроме того, при каждом обращении к такой переменной генерируется сообщение.
После применения этого метода можно проверить значение, хранящееся в переменной, воспользовавшись функциями isset и empty. Для того чтобы проверить переменную на значение NULL, можно воспользоваться функцией is_null. Эти функции подробно обсуждаются в главе 11, "Данные".
Ссылки
По умолчанию после присвоения переменной значения, хранящегося в другой переменной, создается копия данных. В листинге 2.5 продемонстрировано такое поведение переменных. Так, значение переменной b остается неизменным даже после изменения значения переменной a. В большинстве случаев это допустимое поведение. Но если необходимо, чтобы две переменные хранили одно и то же значение, можно воспользоваться оператором ссылки &.
| Листинг 2.5. Присвоение переменным значений переменных
<?php
// создать переменную $a = "Apple";
//присвоить значение $a переменной $b
$b = $a;
//изменить $a $a = "Ball"; //распечатать Apple print($b);
В листинге 2.6 продемонстрирована работа оператора &. В этом примере a и b разделяют один и тот же блок памяти, и присвоение значения одной из переменных приводит к изменению общего значения. Поэтому переменную b можно рассматривать в качестве псевдонима (или, по-другому, алиас) a, за исключением того, что существование b не зависит от a. Внутренне PHP "понимает" существование ссылок на один блок памяти. Конечно, можно создать столько ссылок на одно значение, сколько необходимо. Есть два способа удалить ссылку: воспользоваться функцией unset или создать ссылку на другое значение.
| Листинг 2.6. Присвоение по ссылке
<?php
// создать переменную $a = "Apple"; //создать ссылку $b = &$a;
//изменить значения $a и $b $a = "Ball"; //удалить $a unset($a);
//Распечатать значение Ball print($b);
?>
Смещение строк
Если переменная содержит строку, к каждому символу можно обратиться, используя фигурные скобки. Нумерация символов строки начинается с нуля. Для того чтобы сослаться на седьмой символ переменной s, необходимо указать $s{6}. Кроме того, пользуясь такой формой записи, можно задать значение символа в строке: $s{6} = 'x'. В PHP для замены указанного символа используется только первый символ значения в правой части выражения. Если переменная в левой части не является строкой, она не будет изменена. В листинге 2.7 показано использование фигурных скобок для ссылки на отдельные символы.
| Листинг 2.7. Ссылка на отдельный символ_
<?php
//поменять пробел на символ подчеркивания
$s = "a string";
$s{1} = print($s);
?>
Исторически сложилось так, что PHP использует квадратные скобки для задания смещения в строке. Однако из-за неоднозначности, возникающей при использовании такой же записи при работе с массивами, эта форма записи не применяется.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Переменные, операторы и выражения. Часть Пятая.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
PHP. Переменные, операторы и выражения. Часть Четвёртая. | PHP. Переменные, операторы и выражения. Часть Шестая. |