Передача по значению

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

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

Список тем

Основы передачи по значению

id: 38988_task_predict_1

В этом примере переменная `$value` передается в функцию `increment`. Внутри функции ее копия увеличивается на единицу. Что выведет `echo` после вызова функции?

Выберите правильный вариант ответа
<?php
function increment($number) {
    $number++;
}

$value = 10;
increment($value);
echo $value;
?>
Сообщения
Проверить
Показать подсказку

Передача строки по значению

id: 38988_task_give_result_1

Тот же принцип применяется и к строкам. Функция `addSuffix` добавляет к своей копии переменной суффикс, но оригинал остается нетронутым. Какое значение будет у переменной `$name` после вызова функции?

Что должно получиться?
<?php
function addSuffix($text) {
    $text = $text . " Suffix";
}

$name = "Original";
addSuffix($name);
echo $name;
?>
Сообщения
Проверить
Показать подсказку

Как получить измененное значение?

id: 38988_task_replace_1

Чтобы получить результат работы функции, которая что-то вычисляет, она должна `вернуть` это значение, а внешний код должен его `принять` в переменную. Дополните код, чтобы он правильно удваивал значение переменной.

Заполните пропуски
<?php
function doubleValue($num) {
    input1S $num * 2;
}

$myVar = 5;
// Присваиваем переменной результат вызова функции
input2S = doubleValue($myVar);

echo $myVar;
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправь логическую ошибку

id: 38988_task_error_1

В коде есть логическая ошибка, типичная для новичков. Функция `makeUppercase` правильно создает строку в верхнем регистре и возвращает её, но результат её работы никак не используется. Исправьте строку вызова, чтобы переменная `$message` действительно изменилась.

Найдите ошибку и исправьте
<?php
function makeUppercase($str) {
    return strtoupper($str);
}
 
$message = "hello world";
makeUppercase($message);
echo $message;
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Хитрый вопрос с return

id: 38988_task_give_result_2

Внимательно посмотрите на этот код. Функция `modifyNumber` изменяет свою копию переменной и возвращает результат. Но используется ли этот результат? Какое значение будет выведено в конце?

Что должно получиться?
<?php
function modifyNumber($n) {
    $n = $n + 10;
    return $n;
}

$value = 5;
modifyNumber($value);
echo $value;
?>
Сообщения
Проверить
Показать подсказку

Передача массива по значению

id: 38988_task_predict_2

Принцип передачи по значению работает и для массивов. Функция `addElement` получает копию массива и добавляет элемент в эту копию. Что выведет `print_r` для исходного массива `$letters`?

Выберите правильный вариант ответа
<?php
function addElement($arr) {
    $arr[] = 'd';
}

$letters = ['a', 'b', 'c'];
addElement($letters);
print_r($letters);
?>
Сообщения
Проверить
Показать подсказку

Соберите демонстрацию

id: 38988_task_build_1

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

Перетяните в правильном порядке строки из одного блока в другой
$counter = 1;
echo $counter;
tryToChange($counter);
function tryToChange($val) {
<?php
?>
    $val = 99;
}
echo $val;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Значение или Ссылка?

id: 38988_task_compare_1

В PHP существует два способа передачи аргументов в функцию. Сопоставьте каждый способ с его ключевой характеристикой.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Изменения параметра внутри функции НЕ влияют на исходную переменную.
Изменения параметра внутри функции ВЛИЯЮТ на исходную переменную.
Передача по ссылке (pass by reference)
Передача по значению (pass by value)
Сообщения
Проверить
Показать подсказку
🚀 Визуализатор кода
0 / 0
Скорость:
Режим:
💡 Что происходит?
Загрузите пример для начала...
🤔
Проверка знаний
История шагов
Готов
НайтиКурс.Ру