Почему такая запись выдаёт фатальную ошибку?
Потому что $count это не ограничение на количество замен, а туда записывается сколько раз сработала замена.

Потому туда надо передавать переменную, а не цифру.

sandbox.onlinephpfunctions.com/code/87f0105ff5614c...

str_replace(
    array|string $search,
    array|string $replace,
    string|array $subject,
    int &$count = null
): string|array
https://www.php.net/manual/ru/function.str-replace.php
https://www.php.net/manual/ru/function.str-replace.php
int &$count = null

амперсенд перед параметром .  
описание параметра
count
Если передан, то будет установлен в количество произведённых замен.

Т.е. четвертый параметр работает как дополнительный результат из функции.
просто пишите 3 аргумента

в режиме телепата думаю вы хотели заменить только первое вхождение.
https://stackoverflow.com/questions/1252693/using-...
например как по ссылке