2014-02-12 3 views
0

Я просто узнаю о php, и я не могу понять, почему я получаю разные результаты от двух следующих фрагментов кода.php variables - неожиданные результаты

Сниппет 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.

Это может показаться очень простой, но я могу честно не понять, почему это не работает.

Любая помощь приветствуется.

+0

Если бы я понять свою логику, не следует ли вам использовать 'for ($ counter = 0; $ counter <2; $ counter ++)', так как вы устанавливаете x равным 0, вы получите 12 и 24 возвращенных – Karl

+1

You перезаписывают '$ x' для другое значение в вашем цикле 'for'. Попытайтесь ИЗБЕГАТЬ, используя глобальные переменные, хотя: их трудно отлаживать, препятствовать тестированию и, как правило, неодобрительно. – Wrikken

ответ

1

Повторное использование имени переменной $x для вашего счетчика циклов. Вы устанавливаете $x в 0, так что вы получаете 0 + 12, когда вы делаете $_GLOBALS['x'] + $_GLOBALS['y']. Вы должны переименовать его в то, что вы еще не используете. Я рекомендую изменить его на $i:

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

Я также рекомендую вам избегать использования $_GLOBALS в целом.

+0

Я не могу поверить, что этого не заметил! Большое спасибо за ответы каждого. –

0

При создании цикла

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

Вы перезаписать определение x из ранее ... Изменить его

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

и вы увидите ...

Смежные вопросы