почему моя переменная массива $ setting не хранит свои значения? - PullRequest
0 голосов
/ 09 марта 2012

У меня проблема со следующим: -

//index.php
<?php

define('PATH','Ajfit/');

/* Get all the required files and functions */
require(PATH . 'settings.inc.php');
require(PATH . 'inc/common.inc.php');

?>

//setting.inc.php
<?php
      $settings['language']='English';
?>

//inc/common.inc.php
<?php
      //global $settings, $lang, $_SESSION; //$setting = null????
      $language = $settings['language']; //$language is still null
?>

когда я пытаюсь получить доступ к глобальной переменной $ settings в common.inc.php, она устанавливается равной нулю, даже если я устанавливаю переменную в setting.inc.php. Если я отлаживаюсь, когда я выхожу из setting.inc.php, переменная $ settings устанавливается в index.php, однако, когда я вхожу в common.inc.php, переменная $ settings устанавливается в null.

У кого-нибудь есть идеи?

1 Ответ

5 голосов
/ 09 марта 2012

Ответ: В файле inc/common.inc.php вам не нужно использовать ключевое слово global, переменная уже доступна.Использование global переопределяет переменную и, таким образом, устанавливается null.

Объяснение:

Область переменных является ключевым здесь.Ключевое слово global требуется только при изменении области действия.Область видимости обычных файлов (включая include() s) одинакова, поэтому все ваши переменные доступны любому php в той же области, даже если это происходит из другого файла.

Примергде вам нужно использовать global внутри функций.Область действия функции отличается от области обычного php, который отличается от class scope и т. Д.

Пример:

//foo.php
  $foo = "bar";

  echo $foo; //prints "bar" since scope hasn't changed.

  function zoo() {
    echo $foo; //prints "" because of scope change.
  }

  function zoo2() {
    global $foo;
    echo $foo; //prints "bar" because $foo is recognized as in a higher scope.
  }

  include('bar.php');

//bar.php
  echo $foo; //prints "bar" because scope still hasn't changed.

  function zoo3() {
    echo $foo; //prints "" for the same reason as in zoo()
  }

  function zoo4() {
    global $foo;
    echo $foo; //prints "bar" for the same reason as in zoo2()
  }

Дополнительная информация:

Если вы хотите получить больше информации о том, когда использовать global, а когда нет, обратитесь к документации php.net о переменной области действия .

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