php:为什么preg_replace_回调不允许内置php函数,只允许匿名用户函数?
这不起作用,并输出一个空字符串:php:为什么preg_replace_回调不允许内置php函数,只允许匿名用户函数?,php,callback,callable,preg-replace-callback,Php,Callback,Callable,Preg Replace Callback,这不起作用,并输出一个空字符串: $check["pattern"] = "correct"; $text = "Could this be correct?"; echo preg_replace_callback($check["pattern"],ucfirst,$text); 最好使用内置函数。事实上,常规回调确实允许内置函数,但不允许preg_replace_回调。可能是php的功能请求?您的代码应该会触发一个通知和警告: 注意:使用未定义的常量ucfirst-假定为“ucfirs
$check["pattern"] = "correct";
$text = "Could this be correct?";
echo preg_replace_callback($check["pattern"],ucfirst,$text);
最好使用内置函数。事实上,常规回调确实允许内置函数,但不允许preg_replace_回调。可能是php的功能请求?您的代码应该会触发一个通知和警告:
- 注意:使用未定义的常量ucfirst-假定为“ucfirst”
- 警告:preg_replace_callback():分隔符不能是字母数字或反斜杠
$check["pattern"] = "/correct/";
$text = "Could this be correct?";
echo preg_replace_callback($check["pattern"],'ucfirst',$text);
。。。我们得到这个:
警告:ucfirst()要求参数1为字符串,数组给定
因此,使用内置回调函数可以很好地工作。但是,正如所解释的,函数需要的是字符串
,而不是数组。而且,正如报告所解释的:
将被调用并传递主题字符串中匹配元素的数组的回调
总而言之:这不是一个合理的特性请求,而是代码中的一个bug;-) 您的代码应触发通知和警告:
- 注意:使用未定义的常量ucfirst-假定为“ucfirst”
- 警告:preg_replace_callback():分隔符不能是字母数字或反斜杠
$check["pattern"] = "/correct/";
$text = "Could this be correct?";
echo preg_replace_callback($check["pattern"],'ucfirst',$text);
。。。我们得到这个:
警告:ucfirst()要求参数1为字符串,数组给定
因此,使用内置回调函数可以很好地工作。但是,正如所解释的,函数需要的是字符串
,而不是数组。而且,正如报告所解释的:
将被调用并传递主题字符串中匹配元素的数组的回调
总而言之:这不是一个合理的特性请求,而是代码中的一个bug;-) 所有功能都可以正常工作。问题是这些函数需要某些参数
ucfirst
需要字符串作为输入,但是preg\u replace\u callback
正在传递一个匹配数组
所以。。。如果您有一个内置函数,其签名与
preg\u replace
回调签名兼容,那么它可以工作。但是,不是所有内置函数都有兼容的签名。它可以与所有函数配合使用。问题是这些函数需要某些参数ucfirst
需要字符串作为输入,但是preg\u replace\u callback
正在传递一个匹配数组
所以。。。如果您有一个内置函数,其签名与
preg\u replace
回调签名兼容,那么它可以工作。但是,不是所有的内置函数都有兼容的签名。我肯定你听说过strpos
,但我只是把它放在那里……当你在引号中加上“ucfirst”时,它也不起作用吗?(因为它是一个字符串…)是的,谢谢,这只是一个虚构的例子。我在现实生活中使用了一个合适的正则表达式:我确信你听说过strpos,但我只是把它放在那里……当你把“ucfirst”放在引号里时,它也不起作用吗?(因为它是一个字符串…)是的,谢谢,这只是一个虚构的例子。我在现实生活中使用了一个合适的正则表达式:PThanks,另一个很好的解释。阿尔瓦罗是第一个,所以我希望如果我接受这一点是可以的:)谢谢,另一个很好的解释。阿尔瓦罗是第一个,所以我希望我接受这一点是可以的:)