【发布时间】:2016-04-13 20:59:09
【问题描述】:
我需要以同样的方式修改一些变量。例如,当某些条件满足时,我需要将每个变量乘以 2。像这样:
$a = 10;
$b = 100;
$c = 1000;
$d = 10000;
if($someCondition) {
$a *= 2;
$b *= 2;
$c *= 2;
$d *= 2;
}
这里我想调用一个函数将更改应用到所有变量,而不是一一相乘。我尝试使用这样的回调函数(为这种类型的简单计算编写这样的函数可能看起来很傻,但我有更复杂的事情要做,这里保持简单以便更好地理解) :
试用 1
function multiply_vars(&$a,&$b,&$c,&$d) {
foreach(func_get_args() as $val) {
$val *= 2;
}
}
if($someCondition) {
multiply_vars($a,$b,$c,$d);
}
这可行,但我需要确切知道我传递给函数的变量数量,并将每个变量设置为
&的引用。例如,当我传递 5 个变量进行修改时,上面的函数会给我错误的结果。
试用 2
function multiply_vars() {
foreach(func_get_args() as $varname) {
global $$varname;
$$varname *= 2;
}
}
if($someCondition) {
modify_vars('a','b','c','d');
}
这适用于全球范围内。但问题是,我在一个类函数中执行此操作,其中
global $$varname指的是我的类函数之外的一个变量。
还有其他方法可以实现我的目的吗?
注意:我不想将变量放入数组中。我知道,如果在数组中,可以通过
array_map()函数更好地解决。
【问题讨论】:
-
为什么不直接把它们作为数组传入,返回数组,返回时再解析呢?
-
@JeremyJackson,我需要修改原始变量。您能否更好地将您的建议发布为带有代码的答案,以便我更好地了解它将如何实现我的目的?
-
照JJ说的做,用数组。将其作为参数发送,并让一些函数/方法完成工作,并返回可以更新全局范围的结果。