我有一个替换回调方法,在这个方法中,我尝试用数组值替换多个字符串事件。
我已经通过$parametersArray关键字将use传递给回调方法,如下所示( regex匹配3个元素):
$string = 'Welcome Mr MM1, MM2 MM3 to the website';
$parametersArray = array('K', 'A' , 'AD');
$line = preg_replace_callback(
'(MM[1-9])',
// anonymous
function () use ($parametersArray) {
static $paramArray = $parametersArray;
return array_shift($paramArray);
},
$string
);我得到了以下错误:
解析错误:语法错误,意外的'$parametersArray‘(T_VARIABLE)
如果我显式地将数组设置为静态变量,则不会得到错误并得到预期的行为。
将数组作为变量直接分配给函数中静态定义的变量有问题吗?
发布于 2016-07-13 17:37:01
您可以引用数组,然后在闭包中使用它的原始值。请注意,参数是在定义时初始化的,而不是在您调用它时初始化的-因此,这可能对您有用:
<?php
$string = 'Welcome Mr MM1, MM2 MM3 to the website';
$parametersArray = array('K', 'A' , 'AD');
$refArray =& $parametersArray;
$line = preg_replace_callback(
'(MM[1-9]{1})',
// anonymous
function () use (&$refArray, $parametersArray) {
# stays the same in every call
# it is a copy after all
print_r($parametersArray);
return array_shift($refArray);
},
$string
);
echo $line;
# Welcome Mr K, A AD to the website
?>https://stackoverflow.com/questions/38358094
复制相似问题