Hay una última cosa interesante de la expresión match() que le da mucha flexibilidad; el uso de condiciones en lugar de valores.
Ojo, que para poder usar condiciones es imprescindible usar true como el «valor a analizar» (vamos, el valor que le pasamos a match).
Por ejemplo, podemos hacer ésto:
$precio = 60; $gastosEnvio = match (true) { $precio < 50 => COSTE_ENVIO_NORMAL, $precio >=50 && $precio < 300 => COSTE_ENVIO_REDUCIDO, $precio >= 300 => 1, }; echo $gastosEnvio . PHP_EOL;
O escrito de otra forma más sencilla:
$gastosEnvio = match (true) {
$precio >= 300 => 1,
$precio >=50 => COSTE_ENVIO_REDUCIDO,
$precio < 50 => COSTE_ENVIO_NORMAL,
};
echo $gastosEnvio . PHP_EOL;
Cuidado que no vale pasarle un 1 en lugar de true porque nos va a dar un error.
He probado a pasar false en lugar de true y no te saca un error, te escoge una de las opciones pero aún no he descifrado por qué.