Как объявить глобальную переменную в php?

104

У меня есть код примерно так:

<?
    $a="localhost";
    function body(){
        global $a;
        echo $a;
    }

    function head(){
        global $a;
        echo $a;
    }

    function footer(){
        global $a;
        echo $a;
    }
?>

Есть ли способ определить глобальную переменную в одном месте и сделать переменную $a доступной во всех функциях сразу? без использования global $a; больше?

Теги:
global-variables
global

8 ответов

167
Лучший ответ

Вместо этого можно использовать массив $GLOBALS:

$GLOBALS['a'] = 'localhost';

function body(){

    echo $GLOBALS['a'];
}

Из Manual:

Ассоциативный массив, содержащий ссылки на все переменные, которые в настоящее время определены в глобальной области действия script. Имена переменных - это ключи массива.


Если у вас есть набор функций, которым нужны некоторые общие переменные, класс со свойствами может быть хорошим выбором вместо глобального:

class MyTest
{
    protected $a;

    public function __construct($a)
    {
        $this->a = $a;
    }

    public function head()
    {
        echo $this->a;
    }

    public function footer()
    {
        echo $this->a;
    }
}

$a = 'localhost';
$obj = new MyTest($a);
52

Если переменная не изменится, вы можете использовать define

Пример:

define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');

function footer()
{
    echo FOOTER_CONTENT;
}
  • 2
    Что происходит, когда FOOTER_CONTENT пытается изменить? Это как final в Java или const в C, C ++ и C #?
  • 4
    Если вы попытаетесь определить FOOTER_CONTENT во второй раз, php выдаст уведомление об этом
Показать ещё 3 комментария
23

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

$GLOBALS['variable'] = 'localhost'; 

и использовать его глобально

или вы можете использовать константу, доступную на всем протяжении script

define('HOSTNAME', 'localhost');  
  • 1
    Если вы используете 'define', после установки вы не сможете изменить определение!
  • 0
    в вашем первом примере говорится, что переменная $ теперь называется localhost позже в скрипте?
Показать ещё 1 комментарий
4

Вы можете попробовать ключевое слово use в функциях Закрытие или Lambdas, если это соответствует вашему намерению... PHP 7.0. Не то, чтобы это было лучше, а просто альтернатива.

$foo = "New";
$closure = (function($bar) use ($foo) {
    echo "$foo $bar";
})("York");

демо | информация

4

Этот ответ очень поздний, но то, что я делаю, задается классом, который содержит значения Booleans, array и integer-initial, как статические переменные глобальной области. Любые константные строки определяются как таковые.

define("myconstant", "value"); 

class globalVars {

    static $a = false;

    static $b = 0;

    static $c = array('first' => 2, 'second' => 5);

}


function test($num) {

    if (!globalVars::$a) {

        $returnVal = 'The ' . myconstant . ' of ' . $num . ' plus ' . globalVars::$b . ' plus ' . globalVars::$c['second'] . ' is ' . ($num + globalVars::$b + globalVars::$c['second']) . '.';

        globalVars::$a = true;

    } else {

        $returnVal = 'I forgot';

    }

    return $returnVal;

}

echo test(9); ---> The value of 9 + 0 + 5 is 14.

echo "<br>";

echo globalVars::$a; ----> 1

Ключевые слова static должны присутствовать в классе else, а vars $a, $b и $c не будут находиться в глобальном масштабе.

  • 0
    Это хорошее решение по многим причинам. Классу static требуется всего несколько символов, добавленных к базовому имени переменной: G :: $ Name, где объявление выглядит следующим образом: class G {static $ Name, $ Name2;} Обратите внимание, что G может быть действительно глобальными переменными, тогда E может использоваться для переменных, относящихся к Сотрудникам. Это легче программировать, чем полномасштабная объектно-ориентированная парадигма, поддерживаемая PHP. Если константы действительно нужны, вы можете объявить их после «const», точно так же, как переменные, объявленные после «static» - просто пропустите знаки доллара. G :: Example будет примером глобальной константы.
4

Вы ответили так, как вы написали вопрос - используйте 'define'. но после установки вы не можете изменить определение.

Кроме того, есть трюки с константой в классе, такие как class:: constant, которые вы можете использовать. Вы также можете сделать их переменными, объявив статические свойства классу, с функциями для установки статического свойства, если вы хотите его изменить.

1

Переменная, объявленная вне функции, имеет GLOBAL SCOPE и может быть доступна только вне функции

<?php
global $a;
$a=10;
echo $a;
function xl($a){
echo "in the function".$a." <br/>";
}
echo "in outside ".$a."<br/>";
xl($a);
?>
-15

Вам больше не следует использовать глобальные переменные, они недоступны в PHP 5.4.

  • 17
    РЕГИСТРАЦИЯ ГЛОБАЛОВ удалена. не глобальные.
  • 5
    Этот ответ, как написано, является неправильным и должен быть обновлен, чтобы отразить комментарий unity100. Если GLOBALS все еще доступны, пожалуйста, уточните, какие аспекты GLOBAL изменились. Что-то вроде этого.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню