П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое







Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 98194 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 29079 раз(а).

Учебник HTML.
Просмотров 56201 раз(а).

Руководство по PHP5.
Просмотров 25940 раз(а).

Хостинг через призму DNS.
Просмотров 30469 раз(а).

Подборка текстов стандартных документов.
Просмотров 28983 раз(а).

Учебник PHP - Самоучитель
Просмотров 33731 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 34989 раз(а).

Внешние атаки...
Просмотров 26957 раз(а).

Учебник PHP.
Просмотров 22784 раз(а).

SSI в примерах.
Просмотров 17856 раз(а).



 
 



Руководство по PHP
Пред. Глава 21. Ссылки. Разъяснения След.

Что делают ссылки

Ссылки в PHP дают возможность двум переменным ссылаться на одно содержимое. Например:

<?php
$a
=& $b;
?>

означает, что $a указывает на то же содержание, что и $b.

Замечание: $a и $b здесь абсолютно эквивалентны, но это не означает, что $a указывает на $b или наоборот. Это означает, что $a и $b указывают на одно место.

Замечание: При копировании массива ссылок, они не разыменовываются. Это также касается массивов, передаваемых функциям по значению.

Такой же синтаксис можно использовать и в функциях, возвращая ссылки, а так же в операторе new (начиная с PHP 4.0.4):

<?php
$bar
=& new fooclass();
$foo =& find_var($bar);
?>

Замечание: Если опустить &, это приведёт к копированию объекта. Если вы используете $this в классе, операция проводится над текущим экземпляром этого класса. Присвоение без & приведёт к копированию экземпляра, и $this будет работать с копией, что не всегда желательно. Обычно, вам нужно иметь один экземпляр, из соображений производительности и использования памяти.

Операция @, которая скрывает сообщения об ошибках, например в конструкторе @new, не может быть использована совместно с операцией & (&new). Это ограничение интерпретатора Zend.

Внимание

Если переменной, объявленной внутри функции как global, будет присвоена ссылка, она будет видна только в функции. Чтобы избежать это, воспользуйтесь массивом $GLOBALS.

Пример 21-1. Присвоение ссылок глобальным переменным внутри функции

<?php
$var1
= "Example variable";
$var2 = "";

function
global_references($use_globals)
{
    global
$var1, $var2;
    if (!
$use_globals) {
        
$var2 =& $var1; // только локально
    
} else {
        
$GLOBALS["var2"] =& $var1; // глобально
    
}
}

global_references(false);
echo
"значение var2: '$var2'\n"; // значение var2: ''
global_references(true);
echo
"значение var2: '$var2'\n"; // значение var2: 'Example variable'
?>
Думайте о global $var; как о сокращении от $var =& $GLOBALS['var'];. Таким образом, присвоение $var другой ссылки влияет лишь на локальную переменную.

Замечание: При использовании переменной-ссылки в foreach, изменяется содержание, на которое она ссылается.

Пример 21-2. Ссылки и foreach

<?php
$ref
= 0;
$row =& $ref;
foreach (array(
1, 2, 3) as $row) {
    
// do something
}
echo
$ref; // 3 - последнее значение, используемое в цикле
?>

Внимание

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

Пример 21-3. Ссылки и сложные массивы

<?php
$top
= array(
    
'A' => array(),
    
'B' => array(
        
'B_b' => array(),
    ),
);

$top['A']['parent'] = &$top;
$top['B']['parent'] = &$top;
$top['B']['B_b']['data'] = 'test';
print_r($top['A']['parent']['B']['B_b']); // array()
?>

Второе, что делают ссылки - передача параметров по ссылке. При этом локальная переменная в функции и переменная в области видимости вызывателя ссылаются на одно и то же содержимое. Пример:

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
?>

Этот код присвоит $a значение 6. Это происходит, потому что в функции foo переменная $var ссылается на то же содержимое, что и переменная $a. См. также детальное объяснение передачи по ссылке.

Третье, что могут ссылк - возвращение значение по ссылке.


Пред. Начало След.
Ссылки. Разъяснения Уровень выше Чем ссылки не являются


 





Copyright © 2005-2011 Project.Net.Ru