使用"function(array $ matches)"时出现意外的T_FUNCTION错误

Mik*_*ike 7 php syntax-error

嗨我正在使用以下代码,但我得到第二行的"意外的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);
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 21

当你的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);
Run Code Online (Sandbox Code Playgroud)

此外,array $matches这不是问题,因为PHP 5.2支持数组的类型提示.