get_id() rather than ->id, and why it matters

The getter looks like ceremony over a property and is the entire point of the release: with the read going through a method, where the value comes from is no longer fixed at the call site.

$product->get_id();
$product->get_price( 'edit' );    // raw, unfiltered
$product->get_price( 'view' );    // filtered, which is the default

The context argument is the part nobody uses and occasionally needs: view runs the display filters, so a price shown to a customer reflects any dynamic pricing plugin, while edit gives the stored value. Reading the wrong one is how an admin screen shows a discounted price as the base price, and how a recalculation compounds a discount that was already applied.