Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php:为什么preg_replace_回调不允许内置php函数,只允许匿名用户函数?_Php_Callback_Callable_Preg Replace Callback - Fatal编程技术网

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():分隔符不能是字母数字或反斜杠
如果没有,您就需要认真检查PHP错误报告设置。借助错误消息修复代码:

$check["pattern"] = "/correct/";
$text = "Could this be correct?";
echo preg_replace_callback($check["pattern"],'ucfirst',$text);
。。。我们得到这个:

警告:ucfirst()要求参数1为字符串,数组给定

因此,使用内置回调函数可以很好地工作。但是,正如所解释的,函数需要的是
字符串
,而不是数组。而且,正如报告所解释的:

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


总而言之:这不是一个合理的特性请求,而是代码中的一个bug;-)

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

  • 注意:使用未定义的常量ucfirst-假定为“ucfirst”
  • 警告:preg_replace_callback():分隔符不能是字母数字或反斜杠
如果没有,您就需要认真检查PHP错误报告设置。借助错误消息修复代码:

$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,另一个很好的解释。阿尔瓦罗是第一个,所以我希望如果我接受这一点是可以的:)谢谢,另一个很好的解释。阿尔瓦罗是第一个,所以我希望我接受这一点是可以的:)