@kostik34

Как передаются объекты в PHP по ссылке или по значению?

Всем привет. Решил я пройти тест по PHP и был удивлен результатам. Я все время думал, что объекты передаются по ссылке, а в тесте ответ другой. Вот картинка
c20908716efc4d669622ae07d6cf26e9.jpg
И пользуясь случаем, еще один вопрос, связанный с мультинаследованим. PHP все-таки поддерживает его или нет? Другими словами, когда задают такой вопрос, имеют ввиду трейты или нет?
  • Вопрос задан
  • 1743 просмотра
Решения вопроса 1
@Wol_fi
php, js, mysql, highload
в php4 объекты передавались по значению, в php5 - по ссылке, отсюда может путаница.

И пользуясь случаем, еще один вопрос, связанный с мультинаследованим. PHP все-таки поддерживает его или нет? Другими словами, когда задают такой вопрос, имеют ввиду трейты или нет?

В php нет множественного наследования (класс может расширить только 1 класс). Трейты - это немного другое.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@shekhovtsovy
Я все время думал, что объекты передаются по ссылке, а в тесте ответ другой.

Сами объекты (а точнее их идентификаторы) передаются по значению (т.е. происходит копирование в памяти). Другое дело, что в этих значениях не хранится вся структура объектов, а лишь указатель на структуру. Именно поэтому если вы передадите объект в функцию через параметр, а внутри сделаете unset, то он все ещё будет доступен вне функции, но вот атрибут изменится и внутри и вне функции. Отсюда складывается ложное представление, что объекты передаются по ссылке. Здесь ошибки в тесте нет.
Подробнее здесь: https://www.php.net/manual/ru/language.oop5.refere...

И пользуясь случаем, еще один вопрос, связанный с мультинаследованим. PHP все-таки поддерживает его или нет? Другими словами, когда задают такой вопрос, имеют ввиду трейты или нет?

Когда спрашивают о наследовании, то неплохо бы уточнять, что имеется в виду наследование классов. Т.к. множественное наследование в PHP все же есть. И это не трейты, а интерфейсы, которые позволяют наследоваться от 2 других интерфейсов одновременно. Так что тест не совсем корректный. И в том виде как его задали вы ответили правильно.
Подробнее здесь: https://www.php.net/manual/ru/language.oop5.interf...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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