【问题标题】:Making anonymous functions from PHP 5.3 work with PHP 5.2使 PHP 5.3 中的匿名函数与 PHP 5.2 一起工作
【发布时间】:2014-07-25 14:30:36
【问题描述】:

我现在需要更新一个匿名函数以与 PHP 5.2 兼容。该函数(如下)接受文本并将每个句子的第一个字母大写。

function clean_text($input) {
  $output = $input;
  $output = preg_replace_callback('/([.!?])\s*(\w)/', function ($matches) {
    return strtoupper($matches[1] . ' ' . $matches[2]);
  }, ucfirst(strtolower($input)));
  return $output;
}

我尝试将函数拉出,但我收到一条错误消息,指出回调中的参数 2 现在丢失。有关如何解决此问题的任何想法?

function clean_text($input) {

  function upper_case($input) {
      return strtoupper($input[1] . ' ' . $input[2]);
  }
  $output = preg_replace_callback('/([.!?])\s*(\w)/', upper_case($input), ucfirst(strtolower($input)));

  return $output;

}

错误提示:警告:preg_replace_callback() [function.preg-replace-callback]:需要参数 2“U S”作为 有效回调

【问题讨论】:

  • 当您尝试退出此功能时遇到的exact 错误是什么?
  • 警告:preg_replace_callback() [function.preg-replace-callback]:需要参数 2,'US',才能成为有效的回调
  • 你检查过preg_replace_callback()手册页上的示例#2吗?

标签: php anonymous-function


【解决方案1】:

preg_replace_callback() 作为第二个参数需要一个可调用对象,即函数本身,而不是函数的返回值。

所以只需将upper_case($input) 替换为upper_case,它就会是这样的

preg_replace_callback('/([.!?])\s*(\w)/', 'upper_case', ucfirst(strtolower($input)));

【讨论】:

  • 这行得通,但是这个函数在我正在迭代的数组上被多次使用。最初的 5.3 代码适用于此,但是这个新版本仅在我在页面上调用一次时才有效。在多次使用它的页面上,我收到此错误:致命错误:无法重新声明大写()
  • 好的,现在找到你定义upper_case函数的地方。然后像这样重写:if (!function_exists('upper_case')){ function upper_case(){....} }
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多