PHP несколько инкапсулированных функций область видимости глобальной переменной - PullRequest
5 голосов
/ 21 августа 2011

Это решение проблемы, с которой я столкнулся и нигде не смог найти ответ.Он включает в себя Global Variable Scope и несколько функций.

По сути, я хотел, чтобы одна функция объявляла переменные, а затем чтобы вторая вложенная функция использовала эти переменные.Это прекрасно работает, когда скрипт объявляет переменные, а затем вызывает функцию, которая использует эти переменные после объявления global $var1, $var2;.

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

Решение было написать:

function function_1(){
  global $var1, $var2;
  $var1=0;
  $var2=0;
  function function_2(){
     global $var1, $var2;
  }
  function_2();//call to nested function.
}

В этом случае все переменные взаимодействуют правильно.

Если вы указали 'global'после того, как вы объявили переменные в function_1, вы просто стираете значение переменных (вы объявляете новые переменные без значений?).

Надеюсь, это кому-нибудь поможет:)

Greg

Ответы [ 3 ]

1 голос
/ 21 августа 2011

Не используйте глобальные переменные.Используйте use ($var1,$var2), чтобы вам не нужно было глобализировать переменные

1 голос
/ 21 августа 2011

Чтобы проиллюстрировать, что говорит генезис, сделайте следующее:

function func1($a, $b) // <-- function DEFINITION for func1
{
    // do stuff wit $a and $b

    func2($a, $b); // <-- function INVOCATION of func2 within func1
}

func2($y, $z) // <-- function DEFINITION for func2
{
    // do stuff with $y and $z
}

// --------------------------------

$param1 = "some value";
$param2 = "some other value";

func1($param1, $param2); // <-- explicit INVOCATION of func1... func2 is also invoked within

Никогда используйте ключевое слово global для передачи параметров в функцию.Функции имеют списки аргументов по причине.

0 голосов
/ 21 августа 2011

Вы должны использовать замыкание: function function_2 use ($ var1, $ var2) () { }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...