Это происходит, когда ваш PHP старше 5.3.Поддержка анонимных функций не была доступна до 5.3, поэтому PHP не будет распознавать сигнатуры функций, переданные в качестве таких параметров.
Вам придется создать функцию традиционным способом и вместо нее передать ее имя (я используюlink_code()
например):
function link_code(array $matches) {
if (filter_var($matches[1], FILTER_VALIDATE_URL))
return '<a href="'.
htmlspecialchars($matches[1], ENT_QUOTES).
'" target="_blank">'.
htmlspecialchars($matches[2])."</a>";
else
return "INVALID MARKUP";
}
preg_replace_callback("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is", 'link_code', $text);
Кроме того, array $matches
не является проблемой, поскольку в PHP 5.2 поддерживается хинтинг типов для массивов.