Жорсткі посилання в PHP

 

Жорстке посилання представляє собою просто змінну, яка є синонімом іншої змінної. Багаторівневі посилання (тобто, посилання на посилання змінної, як це можна робити, наприклад, у Perl) не підтримуються. Так що не варто сприймати жорсткі посилання серйозніше, ніж синоніми.

Щоб створити жорстке посилання, потрібно використовувати оператор & (амперсанд). Наприклад:

$a = 10; 
$b = & $a; // тепер $b - те ж саме, що і $a 
$b = 0; // насправді $a = 0 
echo "b = $b, a = $a"; / / Виводить: "b = 0, a = 0"

Посилатися можна не тільки на змінні, але й на елементи масиву (цим жорсткі посилання вигідно відрізняються від символічних). Наприклад:

$a = array ('a' => 'aaa', 'b' => 'bbb'); 
$b = & $a ['b']; // тепер $b - те ж, що й елемент з індексом 'b' масиву 
$b = 0; / / насправді $a ['b'] = 0; 
echo $a ['b']; // Виводить 0

Втім, елемент масиву, для якого планується створити символічне посилання, може і не існувати. Як у наступному випадку:

$a = array ('a' => 'aaa', 'b' => 'bbb'); 
$b = & $a ['c']; // тепер $b - те ж, що й елемент з індексом 'c' масиву 
echo "Елемент з індексом 'c': (". $a ['c'].")";

В результаті виконання розглянутого скрипта, хоча посиланням $b і не було нічого присвоєно, в масиві $a створиться новий елемент з ключем c і значенням - порожній рядком (ми можемо це визначити за результатом роботи echo). Тобто, жорстке посилання на самому ділі не може посилатися на неіснуючий об'єкт, а якщо робиться така спроба, то об'єкт створюється.

Примітка: Якщо прибрати рядок, в якій створюється жорстке посилання, то буде виведено повідомлення про те, що елемент з ключем c не визначено в масиві $а.

Жорсткі посилання зручно застосовувати при передачі параметрів для функції користувача і повернення значення з неї.