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

у меня есть код что-то вроде этого:

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

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

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

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

10 ответов


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

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

function body(){

    echo $GLOBALS['a'];
}

С руководство:

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


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

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);

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

пример:

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

function footer()
{
    echo FOOTER_CONTENT;
}

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

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

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

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

define('HOSTNAME', 'localhost');  

вы ответили на это так, как вы написали вопрос - использовать "определение". но после установки вы не можете изменить определение.

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


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

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 ключевые слова должны присутствовать в классе, иначе vars $a, $b и $c не будут глобально ограничены.


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

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

демо | info


если переменная объявлена вне функции, она уже находится в глобальной области. Поэтому нет необходимости объявлять. Но откуда вы вызываете эту переменную, должны иметь доступ к этой переменной. Если вы вызываете изнутри функцию, вы должны использовать global ключевые слова:

$variable = 5;

function name()
{
    global $variable;

    $value = $variable + 5;

    return $value;  

}

использование ключевого слова Global вне функции не является ошибкой. Если вы хотите включить этот файл в функцию, вы можете объявить переменную как global.

config.php

global $variable;

$variable = 5;

other.php

function name()
{
    require_once __DIR__ . '/config.php';
}

вы может использовать $GLOBALS как хорошо. Это суперглобальная поэтому он имеет доступ везде.

$GLOBALS['variable'] = 5;

function name()
{
    echo $GLOBALS['variable'];
}

в зависимости от вашего выбора вы можете выбрать либо.


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

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

Что делать, если вы используете процедурную функцию вместо переменной и называете их где угодно, как вы.

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

function host()
{
   return "localhost";
}

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