【问题标题】:What is wrong with this PHP function这个 PHP 函数有什么问题
【发布时间】:2011-02-13 08:10:49
【问题描述】:

我是 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

为什么会出错?

【问题讨论】:

  • 你在哪个版本的 PHP 上运行这个?

标签: php regex function syntax-error


【解决方案1】:

您正在使用 PHP 的 Anonymous functions没有名称的函数。

当我运行你的程序时,我没有收到任何错误。可能是您在 PHP &lt; 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]);
}

?>

【讨论】:

  • @unicornaddict:preg_replace_callback 的第二个参数在这种特殊情况下应该是一个字符串。
  • @salathe:感谢您的指点。有趣的是,即使没有引用也可以在这里使用通知:)。看起来OP也没有看到通知:)
【解决方案2】:

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

试试这个:

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

【讨论】:

    【解决方案3】:

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

    您可以通过phpinfo 页面查看您的版本。

    【讨论】:

      【解决方案4】:

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

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

      问候

      rbo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 2011-08-26
        • 2017-03-26
        • 2014-06-29
        • 2011-04-24
        • 2011-08-26
        • 1970-01-01
        相关资源
        最近更新 更多