php变量 - 意外结果

时间:2014-02-12 23:19:15

标签: php

我只是在学习php而且我无法理解为什么我会从以下两个代码片段中得到不同的结果。

摘录1:

<?php
    $x = 22;
    $y = 12;
    $counter = 0;

    function add()
    {
        if ($GLOBALS['counter'] == 0) 
        {
            $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
        }
        else
        {
            $GLOBALS['z'] += $GLOBALS['y'];
        }
        $GLOBALS['counter'] ++;
    }

    add();
    echo "$z <br>";
    add();
    echo "$z <br>";
?>

第一个按预期返回34,46。

摘录2:

<?php
    $x = 22;
    $y = 12;
    $counter = 0;

    function add()
    {
        if ($GLOBALS['counter'] == 0) 
        {
            $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
        }
        else
        {
            $GLOBALS['z'] += $GLOBALS['y'];
        }
        $GLOBALS['counter'] ++;
    }

    for ($x=0; $x < 2; $x++) 
    { 
        add();
        echo "$z <br>";
    }
?>

第二个返回12,24。

这可能听起来很简单但我老实说不清楚为什么这不起作用。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您正在为循环计数器重用变量名$x。您已将$x设置为0,因此当您执行0 + 12时,您会获得$_GLOBALS['x'] + $_GLOBALS['y']。您必须将其重命名为您尚未使用的内容。我建议将其更改为$i

for ($i = 0; $i < 2; $i++) 
{ 
    add();
    echo "$z <br>";
}

我还建议您一般不要使用$_GLOBALS

答案 1 :(得分:0)

创建循环时

for ($x=0; $x < 2; $x++) 
{ 
    add();
    echo "$z <br>";
}

您从之前覆盖x的定义...将其更改为

for ($q=0; $q < 2; $q++) 
{ 
    add();
    echo "$z <br>";
}

你会看到......