PHP - Передача по ссылке

Добро пожаловать,野心勃勃ые программисты! Сегодня мы погружаемся в захватывающую тему на PHP: передача по ссылке. Не беспокойтесь, если вы новички в программировании; я проведу вас через это понятие шаг за шагом, так же, как я делал это для многих студентов на протяжение моих лет преподавания. Давайте отправимся в это кодирование приключение вместе!

PHP - Call by Reference

Что такое передача по ссылке?

Прежде чем мы углубимся в детали, давайте поймем, что означает "передача по ссылке". В PHP, когда мы передаем переменную в функцию, мы обычно передаем ее значение. Это называется "передача по значению". Однако иногда мы хотим передать саму переменную, а не только ее значение. Вот где "передача по ссылке" comes в handy.

Представьте, что у вас есть коробка (переменная), содержащая игрушку (значение). Когда вы передаете коробку по значению, вы даете кому-то копию игрушки. Но когда вы передаете по ссылке, вы даете им саму коробку. Любые изменения, которые они делают, влияют на原件 и его содержимое.

Пример

Давайте начнем с простого примера для иллюстрации этой концепции:

<?php
function addFive($num) {
$num += 5;
}

$myNumber = 10;
addFive($myNumber);
echo $myNumber; // Вывод: 10
?>

В этом примере мы передаем $myNumber по значению. Функция addFive() добавляет 5 к параметру, но это не влияет на исходную переменную $myNumber. Вывод остается 10.

Теперь давайте изменим это, чтобы использовать передачу по ссылке:

<?php
function addFive(&$num) {
$num += 5;
}

$myNumber = 10;
addFive($myNumber);
echo $myNumber; // Вывод: 15
?>

Обратите внимание на & перед параметром $num. Это говорит PHP передавать переменную по ссылке. Теперь, когда мы вызываем addFive($myNumber), он изменяет исходную переменную $myNumber, и вывод becomes 15.

Вызов функции PHP по ссылке

Чтобы вызвать функцию по ссылке, нам нужно сделать две вещи:

  1. Определить параметр функции с & перед ним.
  2. Передать переменную (не значение) при вызове функции.

Вот еще один пример:

<?php
function double(&$value) {
$value *= 2;
}

$number = 5;
double($number);
echo $number; // Вывод: 10

$string = "Hello";
double($string);
echo $string; // Вывод: HelloHello
?>

В этом примере наша функция double() работает как с числами, так и со строками. Она изменяет исходную переменную в обоих случаях.

Переключение двух переменных

Одно из распространенных применений передачи по ссылке - это переключение значений двух переменных. Давайте посмотрим, как это можно сделать:

<?php
function swap(&$a, &$b) {
$temp = $a;
$a = $b;
$b = $temp;
}

$x = "lemonade";
$y = "iced tea";

echo "До переключения: x = $x, y = $y\n";
swap($x, $y);
echo "После переключения: x = $x, y = $y\n";
?>

Вывод:

До переключения: x = lemonade, y = iced tea
После переключения: x = iced tea, y = lemonade

Эта функция swap похожа на фокус魔术ника - она позволяет двум переменным обменяться своими значениями! Без передачи по ссылке нам пришлось бы возвращать несколько значений или использовать глобальные переменные, что может быть запутанным.

Возврат по ссылке

PHP также позволяет функциям возвращать ссылку. Это менее распространено, но может быть полезно в некоторых случаях. Вот пример:

<?php
function &getLargestNumber(&$numbers) {
$largest = &$numbers[0];
foreach ($numbers as &$number) {
if ($number > $largest) {
$largest = &$number;
}
}
return $largest;
}

$myNumbers = [5, 8, 3, 12, 7];
$largestNumber = &getLargestNumber($myNumbers);
$largestNumber = 100;

print_r($myNumbers);
?>

Вывод:

Array
(
[0] => 5
[1] => 100
[2] => 3
[3] => 12
[4] => 7
)

В этом примере getLargestNumber() возвращает ссылку на largest число в массиве. Когда мы изменяем $largestNumber, это действительно изменяет значение в исходном массиве.

Методы таблицы

Вот таблица, резюмирующая методы, которые мы обсуждали:

Метод Синтаксис Описание
Передача по ссылке function myFunc(&$param) Позволяет функции изменять исходную переменную
Возврат по ссылке function &myFunc() Возвращает ссылку вместо значения
Переключение переменных swap(&$a, &$b) Обменивает значения двух переменных

Заключение

Передача по ссылке в PHP похожа на то, что вы даете кому-то ключи от вашего дома вместо фотографии. Это мощно, но должно использоваться осторожно. Помните, с большой властью приходит большая ответственность!

Пока вы продолжаете свое путешествие в PHP, вы найдете множество других захватывающих концепций для исследования. Продолжайте программировать, продолжайте учиться и, самое главное, получайте удовольствие! Кто знает, может быть有一天 вы станете тем, кто будет обучать других магии программирования.

Credits: Image by storyset