wake-up-neo.com

Wie deklariere ich eine globale Variable in PHP?

Ich habe so etwas Code:

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

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

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

gibt es eine Möglichkeit, die globale Variable an einer Stelle zu definieren und die Variable $a in allen Funktionen gleichzeitig verfügbar zu machen? ohne global $a; mehr zu verwenden?

144
LIGHT

Das $GLOBALS Array kann stattdessen verwendet werden:

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

function body(){

    echo $GLOBALS['a'];
}

Aus dem Manual :

Ein assoziatives Array, das Verweise auf alle Variablen enthält, die derzeit im globalen Gültigkeitsbereich des Skripts definiert sind. Die Variablennamen sind die Schlüssel des Arrays.


Wenn Sie über eine Reihe von Funktionen verfügen, die einige allgemeine Variablen benötigen, ist eine Klasse mit Eigenschaften möglicherweise eine gute Wahl anstelle einer globalen:

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

Wenn sich die Variable nicht ändert, können Sie define verwenden.

Beispiel:

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

function footer()
{
    echo FOOTER_CONTENT;
}
71
Dale

Fügen Sie Ihre Variablen in $ GLOBALS super global array hinzu 

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

und verwenden Sie es global

oder Sie können Konstante verwenden, auf die im gesamten Skript zugegriffen werden kann

define('HOSTNAME', 'localhost');  
27
Pankaj Khairnar

Wenn eine Variable außerhalb einer Funktion deklariert wird, ist sie bereits im globalen Gültigkeitsbereich. Es besteht also keine Notwendigkeit zu erklären. Aber von wo aus Sie diese Variable aufrufen, muss Zugriff auf diese Variable haben. Wenn Sie aus einer Funktion heraus anrufen, müssen Sie das global-Schlüsselwort verwenden:

$variable = 5;

function name()
{
    global $variable;

    $value = $variable + 5;

    return $value;  

}

Die Verwendung eines globalen Schlüsselworts außerhalb einer Funktion ist kein Fehler. Wenn Sie diese Datei in eine Funktion aufnehmen möchten, können Sie die Variable als global deklarieren.

config.php

global $variable;

$variable = 5;

other.php

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

Sie können auch $GLOBALS verwenden. Es ist ein Superglobal und hat überall Zugriff.

$GLOBALS['variable'] = 5;

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

Je nach Ihrer Wahl können Sie wählen.

13
Sajidur Rahman

Diese Antwort ist sehr spät, aber ich setze eine Klasse ein, die Booleans, Arrays und Integer-Anfangswerte als statische Variablen des globalen Bereichs enthält. Alle konstanten Zeichenketten sind als solche definiert.

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

Die static-Schlüsselwörter müssen in der Klasse vorhanden sein, andernfalls werden die Variablen $ a, $ b und $ c nicht global festgelegt.

Sie können das Schlüsselwort use in Closure -Funktionen oder Lambdas ausprobieren, wenn dies Ihrer Absicht entspricht ... PHP 7.0. Nicht das ist besser, aber nur eine Alternative.

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

Demo | info

4
Thielicious

Sie haben diese Frage so beantwortet, wie Sie die Frage geschrieben haben - verwenden Sie 'define'. Einmal festgelegt, können Sie jedoch keine Definition ändern.

Alternativ gibt es Tricks mit einer Konstanten in einer Klasse, z. B. class :: constant, die Sie verwenden können. Sie können sie auch als variabel definieren, indem Sie statische Eigenschaften für die Klasse deklarieren. Mit Funktionen können Sie die statische Eigenschaft festlegen, wenn Sie sie ändern möchten.

4
Robbie

Was ist, wenn Sie eine prozedurale Funktion anstelle von Variablen verwenden und sie an beliebiger Stelle wie Sie nennen.

Normalerweise erstelle ich eine Sammlung von Konfigurationswerten und füge sie in eine Funktion mit return-Anweisung ein. Ich füge nur das ein, wo ich den globalen Wert nutzen und bestimmte Funktionen aufrufen muss.

function Host()
{
   return "localhost";
}
0
Veshraj Joshi

Lass uns ein bisschen anders denken:

class globe{
    static $foo = "bar";
}

Sie können es beliebig verwenden und ändern, wie:

function func(){
    echo globe::$var;
}
0
Amir Forsati