PHP В чем разница между $ GLOBALS ['variable']; и глобальная переменная $; - PullRequest
3 голосов
/ 15 сентября 2011

Пожалуйста, посмотрите на следующие два примера:

Пример 1:

$variable = 'some value';

class Foo {
   public function bar() {
      global $variable;
      print $variable;       
   }
}

Пример 2:

$variable = 'some value';

class Foo {
   public function bar() {
      print $GLOBALS['variable'];  
   }    
}

Примеры можно использовать так:

$foo = new Foo();
$foo->bar();

Кажется, что оба делают одно и то же? В чем разница? Один путь лучше другого? Почему есть два разных способа сделать это?

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

Спасибо.

Ответы [ 5 ]

6 голосов
/ 15 сентября 2011

Ключевое слово global импортирует переменную в локальную область, а доступ к глобальному через $GLOBALS - нет.

2 голосов
/ 15 сентября 2011

$GLOBALS - это просто другой способ доступа к глобальным переменным. Ключевые слова global импортируют глобальные переменные в локальную область. $GLOBALS может использоваться для доступа к глобальным переменным без загрязнения локальной области.

Может использоваться, например, для перебора глобальных переменных.

См. $GLOBALS:

$ GLOBALS - содержит ссылки на все переменные, доступные в глобальной области видимости

А the global keyword:

Объявляя $ a и $ b global внутри функции, все ссылки на любую переменную будут ссылаться на глобальную версию.

Второй способ доступа к переменным из глобальной области видимости - использовать специальный PHP-массив $ GLOBALS, определенный PHP.

1 голос
/ 15 сентября 2011

$GLOBALS представляет всю таблицу глобальных переменных в виде Array.

Ключевое слово global позволяет указать одну или несколько меток переменных, которые являются частью таблицы глобальных переменных в таблице локальных переменных. Часто называют import в других ответах.

Было время, когда $GLOBALS в области действия функции не обновлял глобальную таблицу немедленно. Но я думаю, что это сейчас исправлено. По крайней мере, я больше не мог его воспроизводить.

Таким образом, разница заключается лишь в семантике, как написать что-то.

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

$var = 1;
foo();

function foo()
{
    global $var;
    unset($var); # won't unset the global variable
}

Но вы можете получить к ним доступ через $GLOBALS.

$var = 1;
foo();

function foo()
{
    unset($GLOBALS['var']); # unsets the global variable
}

Это довольно специфично, если интересно, посмотрите Демо .

1 голос
/ 15 сентября 2011

Одно различие в использовании. Со страницы руководства

<?php
function test() {
    $foo = "local variable";

    echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
    echo '$foo in current scope: ' . $foo . "\n";
}

$foo = "Example content";
test();
?>

Вы видите, что вы можете получить доступ к этой, глобальной переменной и локальной переменной. Вы не можете сделать это при использовании global $foo. Есть и другие тонкие различия, но я не думаю, что это имеет значение.

Возможно, вы захотите спросить себя, следует ли вам использовать глобалы в любом случае, то, как они используются, почти всегда является анти-паттерном, насколько я могу утверждать, хотя это может быть предметом вкуса.

0 голосов
/ 01 апреля 2015

Из руководства по PHP http://php.net/manual/en/language.references.whatdo.php

Подумайте о глобальном $ var;как ярлык для $ var = & $ GLOBALS ['var'];

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