When is the correct time to use class constants?

My most frequent use is where I am trying to be somewhat defensive, but not to the point of overengineering.

For example if you want to make a class that can convert some arbitrary values between measurements, and want to let the user specify said measurements, to me it makes sense to place them as constants and prefer them to use those class constants.

class Measurement{
    const MM = 'MM';
    const CM = 'CM';
    const INCH = 'INCH';
    .
    .
    .
    // other measurements

    public static function convert($num,$from,$to){
        // ...
    }

    // other functions
}

Then in another file

use Measurement as M;

$new_val = M::convert(24.4, M::INCH, M::CM);

No fussiness. User can feel safe knowing that the parameters they're using for the functions were made by the author, and their IDE will show potential values. It's not perfect, and there are many different ways of doing this (eg: strategy/builder pattern, data objects).

Another use case I have for them is business values, as in specific values used by the business you're working for that the program needs to run, but don't necessarily need to be hitting the database to access them because they'll change only once in a blue moon. An example of this is if you have a specific formula to weigh and package items based on some formula that uses some constants

class PackageVolumeCalculator{

    // Particular ranges and other values the business uses in the real world
    const BAND_0 = 0;
    const BAND_1 = 1000;
    const BAND_2 = 3500;
    const BAND_3 = 5000;
    const MULTIPLIER = 0.250;

    public function calculate($width,$height, $depth){
        // etc
    }
}
/r/PHP Thread