php:为什么preg_replace_callback不允许内置php函数,只允许匿名用户函数


php: Why preg_replace_callback does not allow built in php functions, just anonymous user functions?

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

$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的功能请求?

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

  • 注意:使用未定义的常量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()的手册页面所解释的那样:

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

总之:这不是一个合理的功能请求,这是代码中的一个错误;-)

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

所以。。。如果您有一个内置函数,其签名与preg_replace回调签名兼容,那么它就可以工作。但是,不是所有内置函数都有兼容的签名。