Вопрос пользователя Turgay в уроке «Ссылки», курс «PHP: Массивы»

Turgay

Кроме прочего, такие функции не умеют работать со значениями, которые не присвоены переменным, так как на них нельзя получить ссылки:

<?php

print_r(sort([1, 3, 4]));
// PHP Fatal error:  Only variables can be passed by reference

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

1 0

Роман Ашиков

Кроме прочего, такие функции не умеют работать со значениями, которые не присвоены переменным, так как на них нельзя получить ссылки

Здесь ведь говорится о том, что на значение нельзя получить ссылку, а не о том, что этой ссылки в принципе нет. Конечно же массив хранится в памяти и PHP внутри каким-то образом ссылается на эту область, при передаче аргумента в функцию. А вот как он это делает, это другой вопрос, который выходит за рамки курса. Мы работаем с кодом на верхнем уровне абстракции, которым для нас является PHP и нам не обязательно знать как он на низком уровне оперирует литералами.

Если вам интересно как PHP устроен внутри, то можно попробовать разобрать его исходный код, вот ссылка на репозиторий — https://github.com/php/php-src

Также приведу линк на документацию по ссылкам в PHP — https://www.php.net/manual/ru/language.references.whatare.php Очень рекомендую ознакомиться, там приводятся хорошие аналогии, которые помогут лучше понять как работают ссылки.

1

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Похожие вопросы

andb9 13 января 2021 →

Правильно ли я понимаю, что это особенность PHP, что массивы по умолчанию передаются по значению, а не по с...

Артур Крючок 13 декабря 2019 →

Кроме прочего, такие функции не умеют работать с литералами Литерал - новый термин для меня, в курсах до эт...

Булат Галиханов 15 марта 2019 →

Пример из теории: <?php $data = [1, 3, 4]; $result = sort($data); print_r($result); // => 1 Не сразу понял...

Андрей Захватошин 01 октября 2018 →

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

Виталий Караман 12 апреля 2018 →

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