我为wordpress创建了这个 awesome 插件,可以使用类似乳胶的标签轻松添加对博客帖子的引用。它工作得很好,但有一个讨厌的细节:我正在使用全局变量,因为我需要更改匿名函数中的变量,我无法更改传递的参数(它是一个回调函数)。
我尝试了use
语法并且它可以正常工作,但变量将复制到匿名函数中。
以下是代码,缩写为快速概述我想要做的事情:
// Global variables, ugh...
// I don't want to declare $reflist here!
$reflist = array();
// Implementation of reference parsing.
function parse_references( $str ) {
// Clear array
$reflist = array();
// I want to declare $reflist here!
// Replace all tags
$newstr = preg_replace_callback( "/{.*}/",
function ( $matches ) {
// Find out the tag number to substitute
$tag_number = 5;
// Add to $reflist array
global $reflist;
// I don't want to have to use a global here!
$reflist[] = $tag_number;
return "[$tag_number]";
}, $str );
return $newstr;
}
所以有人知道如何优雅地解决这个问题吗?
答案 0 :(得分:2)
使用use
构造通过引用传递变量。这样,修改匿名函数中的$reflist
值会产生外部效应,这意味着原始变量的值会发生变化。
$newstr = preg_replace_callback("/{.*}/", function($matches) use (&$reflist) {
$tag_number = 5; // important ----^
$reflist[] = $tag_number;
return "[$tag_number]";
}, $a);