глобальные переменные в php не работают - PullRequest
1 голос
/ 15 февраля 2011

Как в приведенном ниже примере, я ожидаю, что выходной результат будет «тестовым значением», почему вместо этого я получаю «0»?

Файл main.php

<?php
include_once 'functions.php';
$var = '0'; 
test();
echo $var; 
?>

Файл functions.php

<?php 
function test()
{
    global $var;
    $var = 'test value';
}
?>

Ответы [ 4 ]

2 голосов
/ 15 февраля 2011

Лучше всего сделать:

   include_once 'functions.php';
   $_GLOBALS["var"] = '0'; 
   test();
   echo $_GLOBALS["var"]; 

и в функции, использующей $_GLOBALS["var"], не делая $_GLOBALS глобальным, это просто.

Ваш код работает отлично: http://codepad.org/zI9xg1sK

1 голос
/ 15 февраля 2011

Почему бы вам не сделать это с

return $var;

и вызвать функцию таким образом:

$var = test();
1 голос
/ 15 февраля 2011

Единственная причина, по которой я могу придумать, состоит в том, что main.php также включается из функции, делая $var локальной переменной в области действия этой функции.

В этом случае это поможет:

<?php
 global $var;
 include_once 'functions.php';
 $var = '0'; 
 test();
 echo $var; 
 ?>
0 голосов
/ 15 февраля 2011

Это альтернативный пример.Ян прокомментировал ответ CappY, что реальная функция уже возвращает значение.Я предполагаю, что именно поэтому он думает, что ему нужно глобальное значение.

Вам не нужно (ab) использовать глобальную переменную для возврата нескольких значений из функции.Два альтернативных (и лучше) варианта - возвращать массив или передавать переменные по ссылке.

Пример возврата массивов:

function test() {
    return array('value 1', 'value 2');
}

// Example usage
list($var1, $var2) = test();
var_dump($var1); // outputs "value 1"
var_dump($var2); // outputs "value 2"

пример передачи по ссылке

function test(&$var2) {
    $var2 = 'value 2';
    return 'value 1';
}

// Example usage
$var1 = test($var2);
var_dump($var1); // outputs "value 1"
var_dump($var2); // outputs "value 2"
...