这不起作用,并输出一个空字符串:
$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的功能请求吗?
答案 0 :(得分:3)
您的代码应触发通知和警告:
如果没有,您真的需要检查PHP错误报告设置。在错误消息的帮助下修复代码:
$check["pattern"] = "/correct/";
$text = "Could this be correct?";
echo preg_replace_callback($check["pattern"],'ucfirst',$text);
......我们得到了这个:
警告:ucfirst()要求参数1为字符串,给定数组为
因此使用内置回调函数工作正常。但是,正如manual page for ucfirst()所解释的那样,函数需要string
,而不是数组。而且,正如manual page for preg_replace_callback()所解释的那样:
将在主题字符串中调用并传递匹配元素的数组的回调。
总结一下:它不是一个明智的功能请求,它是您代码中的错误; - )
答案 1 :(得分:2)
它适用于所有功能。问题是这些功能需要某些参数。 ucfirst
期望字符串作为输入,但preg_replace_callback
传递匹配数组。
所以...如果你有一个内置函数,其签名与preg_replace
回调签名兼容,它就可以了。但不,并非所有内置函数都具有兼容的签名。