Получить переменные извне, внутри функции в PHP - PullRequest
28 голосов
/ 21 февраля 2011

Я пытаюсь выяснить, как я могу использовать переменную, которая была установлена ​​вне функции, внутри.Есть ли способ сделать это?Я попытался установить переменную в значение "global", но она, похоже, не работает должным образом.

Простой пример моего кода

$var = '1';

function() {
$var + 1;
return $var;
}

Я хочу это, чтобывернуть значение 2.

Ответы [ 7 ]

54 голосов
/ 21 февраля 2011

Вам нужно будет использовать глобальное ключевое слово внутри вашей функции. http://php.net/manual/en/language.variables.scope.php

РЕДАКТИРОВАТЬ (смущенно я упустил это из виду, благодаря комментаторам)

... и сохранить результат где-нибудь

$var = '1';
function() {
    global $var;
    $var += 1;   //are you sure you want to both change the value of $var
    return $var; //and return the value?
}
10 голосов
/ 21 февраля 2011

Глобалы добьются цели, но, как правило, хорошо держаться подальше от. В больших программах вы не можете быть уверены в их поведении, потому что они могут быть изменены в любом месте всей программы. И тестирование кода, использующего глобальные переменные, становится очень трудным.

Альтернативой является использование класса.

class Counter {
    private $var = 1;

    public function increment() {
        $this->var++;
        return $this->var;
    }
}

$counter = new Counter();
$newvalue = $counter->increment();
5 голосов
/ 21 февраля 2011
$var = 1;

function() {
  global $var;

  $var += 1;
  return $var;
}

ИЛИ

$var = 1;

function() {
  $GLOBALS['var'] += 1;
  return $GLOBALS['var'];
}
3 голосов
/ 13 июня 2016
$var = '1';
function addOne() use($var) {
   return $var + 1;
}
3 голосов
/ 21 февраля 2011

Эта строка в вашей функции: $var + 1 не изменит значение, присвоенное $var, даже если вы используете глобальное ключевое слово.

Любой из них будет работать, однако: $var = $var + 1; или же $var += 1;

3 голосов
/ 21 февраля 2011

См. http://php.net/manual/en/language.variables.scope.php для документации. Я думаю, что в вашем конкретном случае вы не получили желаемых результатов, потому что вы никому не назначаете операцию $var + 1. Математика выполняется, а затем выбрасывается, по существу. Ниже приведен рабочий пример:

$var = '1';

function addOne() {
   global $var;
   $var = $var + 1;
   return $var;
}
0 голосов
/ 21 февраля 2011
<?php
$var = '1';
function x ($var) {
return $var + 1;
}
echo x($var); //2
?>
...