FanatPHP, почему не изменится? Если $value будет иметь значение, приводимое к false, то $value станет равно 0. То есть поведение будет полностью аналогично $value = $value ?: 0.
Сергей Кореневский, для типизированного свойства нет значения по умолчанию. Хоть ставь вопросик, хоть не ставь, но при обращении к ниму пых будет ругаться.
Должно ли оно быть? Вопрос крайне спорный. Лично я больше склоняюсь к тому, что нет. Всё-таки есть разница между "не инициализировано" и "имеет значение по умолчанию". Если оно не инициализировано - то его как бы и нет, а обращаться к тому, чего нет, никак нельзя. Вас же не возмущает, что пых ругается на неинициализированную локальную переменную. Вот со свойствами то же самое.
Сергей Кореневский, документация всегда отстает от ос свежих версий ПО, это нормально. К тому же функция get_object_vars() используется довольно редко и преимущественно для костылей. Если это ваш объект, а не библиотечный, то лучше реализовать интерфейс Iterator и итерировать сам объект, а не дергать из него свойства.
Tim, так map и возвращает новый массив. Забавно, что если в сеттер передать не каллбек, а непосредственно результат map, то все работает. Добавление ничего не дало.
Tim, вариант из комментов, конечно, сработал. Но мне все-же интересно, почему не работает изначальный вариант, хотя по идее должен. Я и раньше писал аналогичный код и подобных проблем не было, сталкиваюсь впервые.
$value = $value ?: 0
.