«Глобальная» область видимости переменных в PHP - PullRequest
0 голосов
/ 09 ноября 2009

У меня есть фрагмент кода, подобный следующему:

---- file.php ----

require_once("mylib.php");

function($a,$b)
{
    $r = $_GLOBALS['someGlobal'];
    echo $r;
}

---- mylib.php ----

$_GLOBALS['someGlobal'] = "Random String";

Это немного тривиально, но это именно та проблема, которая у меня есть, я не нашел ничего похожего, но ничего, что отвечало бы на мой вопрос напрямую.

Когда я звоню function($a,$b), ничего не повторяется, то есть - $r "пусто", как будто ничего не было назначено на $_GLOBALS['someGlobal'];

Кроме того, я пробовал со следующим:

global $someGlobal;
$someGlobal = "Random String";

То же самое, без эффекта. Кроме того, в file.php, если я пытаюсь использовать global или просто $someGlobal, он все равно не работает.

Насколько я знаю, из документации на php.net, использующей глобальный $someGlobal в mylib.php (и вставив его в верхний уровень file.php), он на самом деле ничего не сделает, так как он уже на насколько я могу судить, «верхний уровень» иерархии области видимости. Тем не менее, я подумал, что регистрация его как глобального может позволить доступ к нему изнутри функции, но это явно не так.

Кто-нибудь может объяснить почему и объяснить, как это обойти?

Редактировать: Мне не следует, чтобы в file.php, если я использую $_GLOBALS['someGlobal'];, значение восстанавливалось нормально, если его нет в функции.

Ответы [ 3 ]

2 голосов
/ 09 ноября 2009

Неверное имя переменной. Это $GLOBALS не $_GLOBALS

http://www.php.net/manual/en/reserved.variables.globals.php

0 голосов
/ 09 ноября 2009

Это $GLOBALS, а не $_GLOBALS!

0 голосов
/ 09 ноября 2009

Из документов в переменной $GLOBALS нет _:

Это прекрасно работает для меня:

$GLOBALS['glob'] = "string";

function foob() {
  echo $GLOBALS['glob'];
}

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