?string - это либо null, либо string. С любовью ваш ко.
если я его явно не присвоил, то схуяли я ошибку получаю?
Короче как я понимаю, как оно работает внутри. Когда мы пытаемся установить значение - оно проверяет, подходящее ли значение, записывает его в поле и ставит у поля символ что проиницилазировано.
Когда читаем оно просто отдает нам это поле, если стоит флаг что проинициализировано.
Когда ты не указываешь явно тип в поле все так-же хранится null, просто т.к. поле не инициализировано пхп не знает, валидный это тип или нет.