Я пытаюсь понять, как я могу использовать переменную, которая была установлена вне функции внутри. Есть ли способ сделать это? Я попытался установить переменную в «global», но, похоже, она не работает так, как ожидалось.
Простой пример моего кода
$var = '1'; function() { $var + 1; return $var; }
Я хочу это, чтобы вернуть значение 2.
Вам нужно будет использовать ключевое слово global внутри вашей функции. http://php.net/manual/en/language.variables.scope.php
EDIT (смущенный, я пропустил это, благодаря комментаторам)
… и сохранить результат где-то
$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? }
Глобалс будет делать трюк, но, как правило, хорошо держаться подальше от. В более крупных программах вы не можете быть уверены в этом, потому что их можно изменить где угодно во всей программе. И тестовый код, который использует глобальные переменные, становится очень тяжелым.
Альтернативой является использование класса.
class Counter { private $var = 1; public function increment() { $this->var++; return $this->var; } } $counter = new Counter(); $newvalue = $counter->increment();
$var = 1; function() { global $var; $var += 1; return $var; }
ИЛИ
$var = 1; function() { $GLOBALS['var'] += 1; return $GLOBALS['var']; }
См. http://php.net/manual/en/language.variables.scope.php для документации. Я думаю, что в вашем конкретном случае вы не получали желаемых результатов, потому что вы не назначали операцию $var + 1
на что-либо. Математика выполняется, а затем отбрасывается, по существу. Ниже приведен рабочий пример:
$var = '1'; function addOne() { global $var; $var = $var + 1; return $var; }
Эта строка в вашей функции: $var + 1
не изменит значение, присвоенное $var
, даже если вы используете ключевое слово global.
Однако любой из них будет работать: $var = $var + 1;
или $var += 1;
$var = '1'; function addOne() use($var) { return $var + 1; }
<?php $var = '1'; function x ($var) { return $var + 1; } echo x($var); //2 ?>