Null coalescing chains, and where null still gets through

?? chains left to right and returns the first operand that is not null, which reads like a safe navigation operator and is not one. It only guards array offsets and property reads — never a method call.

$name = $request['name'] ?? $session['name'] ?? 'anonymous';   // fine

$city = $order->address->city ?? 'unknown';   // fine if address is null

$city = $order->getAddress()->city ?? 'unknown';   // fatal if getAddress() returns null

The property chain is safe because ?? is built on the same machinery as isset(), which tolerates a null intermediate. As soon as a method call appears in the chain the call happens first, and ->city on null is a fatal error before the operator is ever reached. There is no nullsafe operator in this version; the only fix is an early return.