define() takes an array constant now

const has accepted arrays since 5.6, but define() had not — which mattered because const cannot be used conditionally or inside a function, so anything computed at bootstrap had to be a scalar or a global.

define('SHIPPING_ZONES', [
    'domestic' => ['TR'],
    'eu'       => ['DE', 'FR', 'NL'],
]);

SHIPPING_ZONES['eu'][0];   // 'DE'

Useful for configuration derived at boot and immutable afterwards. It does not make the array deeply immutable in any meaningful sense — you cannot reassign the constant, but nothing stops code from copying it and mutating the copy while believing it is the shared one. For anything the application depends on, a small class with a static accessor is clearer.