A method that exists for its effect has always returned null implicitly, which means a caller assigning its result gets something rather than an error. void makes the omission deliberate and checkable.
public function markExported(): void
{
$this->exported_at = new DateTimeImmutable();
$this->save();
}
$result = $order->markExported(); // $result is null, and now obviously so
A void function may still use return; to leave early; what it may not do is return null;, which is a fatal. That distinction reads as pedantry and catches a real case — a method that grew a return value in one branch and not the others. It also documents intent to a static analyser, which is where most of the value is.