这是PHP我正在使用:
低于数据库的值:
$quote = 49;
$add_amp = 0;
$con_array = "3,2,1";
function calcAddAmp($mul)
{
$add_amp = $add_amp + $mul*($quote);
}
$con_array = explode(",", $con);
for($i = 0; $i < count($con_array); $i++) {
switch ($fun) {
case 1:
calcAddAmp(.01);
break;
case 2:
calcAddAmp(.05);
break;
case 3:
calcAddAmp(.02);
break;
case 4:
calcAddAmp(.09);
break;
}
}
$quote = $quote + $add_amp;
问题出现在这里:
echo $add_amp;
$ add_amp返回0,这使$引用与之前相同的值,49。
echo $quote;
我确定我只是错误地写了这个函数,但是找不到我错的地方。
答案 0 :(得分:1)
$add_amp
在您的函数之外声明。
如果你想修改全局的,你需要改变你的功能:
function calcAddAmp($mul)
{
global $quote;
global $add_amp;
$add_amp = $add_amp + $mul * $quote;
}
从函数中返回值会更好:
function calcAddAmp($mul,$a,$q)
{
return $a + $mul * $q;
}
$add_amp = calcAddAmp(0.5,$add_amp,$quote);
答案 1 :(得分:1)
变量具有功能范围。在函数内部设置$add_amp
不会自动在函数外部使用相同的名称修改变量。如果你没有return
函数的值,那就毫无意义了。尽管如此,我还是将这整个不必要的switch
/ function
简化为:
$multipliers = array(1 => .01, 2 => .05, 3 => .02, 4 => .09);
foreach ($con_array as $con) {
$add_amp += $multipliers[$con] * $quote;
}
答案 2 :(得分:0)
for($i = 0; $i < count($con_array); $i++) {
switch ($fun) {
我认为你的意思是:
for($i = 0; $i < count($con_array); $i++) {
switch ($con_array[$i]) {
否则您的案例永远不会匹配(由于$fun
不存在),calcAddAmp
永远不会被调用,$add_amp
的值永远不会改变。
您还需要确保使用$add_amp
中的全球 $quote
和calcAddAmp
,并使用相同名称的at the moment you're operating on some new local ones:
function calcAddAmp($mul) {
global $add_amp, $quote;
$add_amp += $mul * $quote;
}
或
function calcAddAmp($mul) {
$GLOBALS['add_amp'] += $mul * $GLOBALS['quote'];
}
最好完全避免使用全局变量,并将这些变量作为函数参数传递给它们。
答案 3 :(得分:0)
在函数中使用global关键字。并且你的开关是错误的$ fun未定义。
答案 4 :(得分:0)
$add_amp
是函数中的局部变量。每次调用函数时都会重新分配,并且您在顶部创建的$add_amp
变量将始终为0。
答案 5 :(得分:0)
这是另一种方法,使用参考:
function calcAddAmp(&$add_amp, $mul)
{
global $quote;
$add_amp += $mul*($quote);
}
用法示例:
calcAddAmp($add_amp, 0.5);
答案 6 :(得分:0)
Quote和add_amp需要是全局的。
global $quote;
global $add_amp;
$quote = 49;
$add_amp = 0;
$con_array = "3,2,1";
function calcAddAmp($mul)
{
global $quote;
global $add_amp;
$add_amp = $add_amp + $mul*($quote);
}