1. Нет, по умолчанию типизированное свойство не инициализировано
class Product
{
private int $parentId;
private $nonTyped;
public function __construct(
private readonly int $id
) {
}
}
$obj = new Product(1);
var_dump($obj);
// class \Product#2 (3) {
// private int $parentId => *uninitialized*
// private $nonTyped => NULL
// private readonly int $id => int(1)
// }
2. Если это свойство необязательное, то вариантов три:
- не обращаться к свойству до его инициализации;
- инициализировать свойство значением по умолчанию при определении;
- делать коалесценцию в геттере, возвращая значение по умолчанию (
return $this->parentId ?? null;
).