我想知道是否可以创建一个在匿名函数上使用“ use”使用差异元素/变量的函数。
例如,我有这种脚本:
$loadScript = function($src) use ($var1, $var2, $var3)
{
ob_start();
include($src);
$result = json_decode(ob_get_clean(),true);
return $result;
};
$result = $loadScript();
我想用该脚本创建一个函数,该脚本可以允许对use
使用动态变量,如下所示:
$src = 'src/...';
$arrayOfUseVars = array($var1,$var2,$var3,...);
function loadScript($src, $arrayOfUseVars)
{
function($src) use ($arrayOfUseVars)
{
ob_start();
include($src);
$result = json_decode(ob_get_clean(),true);
return $result;
};
}
我不知道是否可以使用vars数组($ arrayOfUseVars)或其他可以动态添加一个或多个vars的方法($ var1,$ var2,$ var3,$ var4,... )?
谢谢
答案 0 :(得分:1)
无法通过函数调用直接传递命名变量。但是,您可以使用assoc数组声明命名变量。
<?php
$src = 'src/...';
$arrayOfUseVars = array(
'var1' => $var1,
'var2' => $var2,
'var3' => $var3,
);
function loadScript($src, $arrayOfUseVars)
{
function($src) use ($arrayOfUseVars)
{
foreach ($arrayOfUseVars as $_name => $_value) {
$$_name = $_value;
}
ob_start();
include($src);
$result = json_decode(ob_get_clean(),true);
return $result;
};
}
只需学习一些新技巧即可。您可以使用compact和extract重写以上代码。这样可以防止名称与循环中的$_name
和$_value
变量发生冲突:
<?php
function loadScript($src, $arrayOfUseVars)
{
function($src) use ($arrayOfUseVars)
{
// Note: Use EXTR_SKIP flag to skip creating
// variable if the named variable exists
extract($arrayOfUseVars, EXTR_SKIP);
ob_start();
include($src);
$result = json_decode(ob_get_clean(),true);
return $result;
};
}
// use compact to pack $var1, $var2 and $var3 into an assoc array
// and send to loadScript for extract
loadScript('src/...', compact('var1', 'var2', 'var3'));
答案 1 :(得分:0)
感谢@KoalaYeung为我工作的答案,这是我的最终代码,可以在函数内保留我想要的变量(例如“ use”的用法):
syn match RedLine "^\*\*\* .* \*\*\*$" skipnl nextgroup=BlueLine
syn match BlueLine ".*" contained