PHP函数返回0,不确定原因

时间:2011-06-29 22:30:02

标签: php mysql arrays function

这是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;

我确定我只是错误地写了这个函数,但是找不到我错的地方。

7 个答案:

答案 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中的全球 $quotecalcAddAmp,并使用相同名称的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);

}