Here is a userland implementation that can be included in code that needs to support PHP 8.3 and below:
<?php
if (!function_exists('grapheme_str_split')) {
    function grapheme_str_split(string $string, int $length = 1): array|false
    {
        if ($length < 1) {
            throw new \ValueError('Argument #2 ($length) must be greater than 0 and less than or equal to 1073741823');
        }
        try {
            return preg_split('/(\X{' . $length . '})/u', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
        } catch (\Throwable $e) {
            return false;
        }
    }
}
?>