这不起作用,并输出一个空字符串:
$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
回调签名兼容,那么它就可以工作。但是,不是所有内置函数都有兼容的签名。