неожиданная ошибка T_FUNCTION при использовании «function (array $ match)» - PullRequest
7 голосов
/ 07 сентября 2010

Привет! Я использую следующий код, но получаю синтаксическую ошибку "непредвиденный T_FUNCTION" для второй строки. Есть предложения?

preg_replace_callback("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is",
function (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";
}, $text);

1 Ответ

21 голосов
/ 07 сентября 2010

Это происходит, когда ваш 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 поддерживается хинтинг типов для массивов.

...