Освобождение памяти
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 использует квадратные скобки для задания смещения в строке. Однако из-за неоднозначности, возникающей при использовании такой же записи при работе с массивами, эта форма записи не применяется.