Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
изы. 
Ссылочные переменные 
Хотя в PHP нет такого понятия, как указатель (что, возможно, к лучшему, а 
скорее 
всего — нет), все же можно создавать ссылки на другие переменные. Существует 
две 
разновидности ссылок: жесткие и символические (первые часто называют просто 
ссылками). Жесткие ссылки появились лишь в PHP версии 4 (в третьей версии суще- 

ствовали лишь символические ссылки). 
Жесткие ссылки 
Жесткая ссылка представляет собой просто переменную, которая является синонимом 

другой переменной. Многоуровневые ссылки (то есть, ссылка на ссылку на перемен- 

ную, как это можно делать, например, в Perl) не поддерживаются. Так что, думаю, 
не 
стоит воспринимать жесткие ссылки серьезнее, чем синонимы. 
Чтобы создать жесткую ссылку, нужно использовать оператор & (амперсанд). Напри- 

мер: 
$a=10; 
$b = &$a; // теперь $b — то же самое, что и $a 
$b=0; // на самом деле $a=0 
echo "b=$b, a=$a"; // auaiaeo "b=0, a=0" 

Глава 7. Переменные, константы, выражения 125 
Ссылаться можно не только на переменные, но и на элементы массива (этим жесткие 

ссылки выгодно отличаются от символических). Например: 
$A=array('a' => 'aaa', 'b' => 'bbb'); 
$b=&$A['b']; // теперь $b — то же, что и элемент с индексом 'b' массива 
$b=0; // на самом деле $A['b']=0; 
echo $A['b']; // auaiaeo 0 
Впрочем, элемент массива, для которого планируется создать символическую ссылку,
 
может и не существовать. Как в следующем случае: 
$A=array('a' => 'aaa', 'b' => 'bbb'); 
$b=&$A['c']; // теперь $b — то же, что и элемент с индексом 'c' массива 
echo "Элемент с индексом 'c': (".$A['c'].")"; 
В результате выполнения этой программы, хотя ссылке $b и не было ничего 
присвое- 
но, в массиве $A создастся новый элемент с ключом c и значением — пустой 
строкой 
(мы можем это определить по результату работы echo). То есть, жесткая ссылка на 

самом деле не может ссылаться на несуществующий объект, а если делается такая 
попытка, то объект создается. 
Попробуйте убрать строку, в которой создается жесткая ссылка, и вы тут же 
получите сообщение о том, что элемент с ключом c не определен в массиве 
$A. 
И все же, жесткая ссылка — не абсолютно точный синоним объекта, на который она 
ссылается. Дело в том, что оператор Unset(), выполненный для жесткой ссылки, не 

удаляет объект, на который она ссылается, а всего лишь разрывает связь между 
ссыл- 
кой и объектом. 
В этой трактовке любую переменную, даже только что созданную, можно рас- 
сматривать как жесткую ссылку. Просто она — единственная, кто ссылается на 
недавно построенный объект. 
Итак, жесткая ссылка и переменная (объект), на которую она ссылается, 
совершенно 
равноправны, но изменение одной влечет изменение другой. Оператор Unset() раз- 
рывает связь между объектом и ссылкой, но объект удаляется только тогда, когда 
на 
него никто уже не ссылается. 
Жесткие ссылки удобно применять при передаче параметров функции и возврате зна- 

чения из нее. Как это делается, мы рассмотрим в главе, описывающей возможности 
создания функций на PHP. 

Часть III. Основы языка PHP 126 
Символические ссылки 
Символическая ссылка — это всего лишь строковая переменная, хранящая имя дру- 
гой переменной. Чтобы добраться до значения переменной, на которую ссылается 
символическая ссылка, необходимо применить оператор разыменования — дополни- 
тельный знак $ перед именем ссылки. Давайте разберем пример: 
$a=10; 
$b=20; 
$c=30; 
$p="a"; // или $p="b" или $p="c" (присваиваем $p имя другой переменной) 
echo $$p; // выводит переменную, на которую ссылается $p, т. е. $a 
$$p=100; // присваивает $a значение 100 
Мы видим, что для того, чтобы использовать обычную строковую переменную как 
ссылку, нужно перед
 
<<-[Весь Текст]
Страница: из 287
 <<-