0

这不起作用,并输出一个空字符串:

$check["pattern"] = "correct";
$text = "Could this be correct?";
echo preg_replace_callback($check["pattern"],ucfirst,$text);

使用内置函数会很好。事实上,一般回调确实允许按照http://php.net/manual/en/language.types.callable.php内置函数,但不允许 preg_replace_callback。可能是对 php 的功能请求?

4

2 回答 2

3

您的代码应触发通知和警告:

  • 注意:使用未定义的常量 ucfirst - 假定为 'ucfirst'
  • 警告:preg_replace_callback():分隔符不能是字母数字或反斜杠

如果没有,您需要检查您的 PHP 错误报告设置。借助错误消息修复代码:

$check["pattern"] = "/correct/";
$text = "Could this be correct?";
echo preg_replace_callback($check["pattern"],'ucfirst',$text);

...我们得到这个:

警告:ucfirst() 期望参数 1 是字符串,给定数组

所以使用内置回调函数工作正常。但是,正如ucfirst() 的手册页所解释的,该函数需要一个string,而不是一个数组。而且,正如preg_replace_callback() 的手册页所解释的:

将调用并传递主题字符串中匹配元素数组的回调。

总结一下:这不是一个明智的功能请求,它是您代码中的一个错误;-)

于 2012-09-13T09:58:51.187 回答
2

它适用于所有功能。问题是这些函数需要某些参数。ucfirst期望字符串作为输入,但preg_replace_callback正在传递一个匹配数组。

preg_replace所以......如果你有一个签名与回调签名兼容的内置函数,它就可以工作。但是不,并非所有内置函数都具有兼容的签名。

于 2012-09-13T10:00:25.493 回答