Вопрос пользователя Turgay в уроке «Ссылки», курс «PHP: Массивы»
Кроме прочего, такие функции не умеют работать со значениями, которые не присвоены переменным, так как на них нельзя получить ссылки:
<?php
print_r(sort([1, 3, 4]));
// PHP Fatal error: Only variables can be passed by reference
Здравствуйте, скажите пожалуйста обычно при создании переменных создается ссылка, и выделяется память под переменную и она хранится там. Теперь о примере описанный выше, где в качестве аргумента функции sort находится массив, вопрос такой, если на нее нет ссылки, тогда где она хранится?
Кроме прочего, такие функции не умеют работать со значениями, которые не присвоены переменным, так как на них нельзя получить ссылки
Здесь ведь говорится о том, что на значение нельзя получить ссылку, а не о том, что этой ссылки в принципе нет. Конечно же массив хранится в памяти и PHP внутри каким-то образом ссылается на эту область, при передаче аргумента в функцию. А вот как он это делает, это другой вопрос, который выходит за рамки курса. Мы работаем с кодом на верхнем уровне абстракции, которым для нас является PHP и нам не обязательно знать как он на низком уровне оперирует литералами.
Если вам интересно как PHP устроен внутри, то можно попробовать разобрать его исходный код, вот ссылка на репозиторий — https://github.com/php/php-src
Также приведу линк на документацию по ссылкам в PHP — https://www.php.net/manual/ru/language.references.whatare.php Очень рекомендую ознакомиться, там приводятся хорошие аналогии, которые помогут лучше понять как работают ссылки.
Есть вопрос или хотите участвовать в обсуждении?
Зарегистрируйтесь или войдите в свой аккаунт
Похожие вопросы
Правильно ли я понимаю, что это особенность PHP, что массивы по умолчанию передаются по значению, а не по с...
Артур Крючок 13 декабря 2019 →
Кроме прочего, такие функции не умеют работать с литералами Литерал - новый термин для меня, в курсах до эт...
Булат Галиханов 15 марта 2019 →
Пример из теории: <?php $data = [1, 3, 4]; $result = sort($data); print_r($result); // => 1 Не сразу понял...
Андрей Захватошин 01 октября 2018 →
Возникает вопрос, как лучше проектировать функции: с передачей по ссылке или по значению. В подавляющем бол...
Виталий Караман 12 апреля 2018 →
Не могу понять в чем суть передачи и возврата по ссылке? Вроде действия все те же производятся.