这个PHP函数有什么问题

时间:2010-04-28 12:44:17

标签: php regex function syntax-error

我是PHP和正则表达的新手。我正在阅读一些在线示例,并附带了这个示例:

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld
?>
php.net

,但令我惊讶的是它不起作用并且一直收到错误:

PHP Parse error:  parse error, unexpected T_FUNCTION

为什么会出错?

4 个答案:

答案 0 :(得分:6)

您正在使用PHP的Anonymous functions:具有无名称的功能。

当我运行你的程序时,我没有得到任何错误。可能是你在PHP < 5.3上尝试。

自PHP 5.3.0起可以使用匿名函数。

如果PHP版本正在创建问题,您可以将程序重新编写为不使用匿名函数:

<?php

// a callback function called in place of anonymous function.
echo preg_replace_callback('~-([a-z])~','fun', 'hello-world');

// the call back function.
function fun($match) {
    return strtoupper($match[1]);
}

?>

答案 1 :(得分:2)

此示例适用于PHP 5.3。您可能使用较旧的东西(例如,PHP 5.2)。

请改为尝试:

<?php
function callback($match) {
    return strtoupper($match[1]);
}
echo preg_replace_callback('~-([a-z])~', 'callback', 'hello-world');

答案 2 :(得分:1)

您使用的是PHP 5.3.0之前的版本吗?在该版本之前的版本中不支持Anonymous functions

您可以使用phpinfo页面检查您的版本。

答案 3 :(得分:1)

这应该适用于5.3之前的版本:

echo preg_replace_callback(
        '/-([a-z])/',     
        create_function( '$arg', 'return strtoupper($arg[1]);' ),
        'hello-world'
     );

此致

RBO