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