Так я же предложил правку, её надо только принять
Вам же нужен не шаблонизатор, а замена токенов в строке. Так и надо написать
В шаблонизаторе должна быть загрузка шаблона из файла, автоискейпинг, управляющие конструкции - хотя бы циклы и условные переходы. А здесь ничего этого нет
Александр Токмаков, наверное, вы хотели сказать "в ранних". Замените стрелочную функцию обычной, null coalescing поменяйте на isset или array_key_exists:
Александр Токмаков, лучше. Он, как минимум, выполняет замены так, как это задумано. Чтобы выполнял ваш, ключи в $array должны содержать квадратные скобки - иначе они останутся в строке после замен. А зачем ob_start/get_contents/clean я не понял - в strtr вы можете сразу $message передать.