Hoe declareer je een globale variabele in php?

Ik heb een code als deze:

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

is er een manier om de globale variabele op één plaats te definiëren en de variabele $ain alle functies tegelijk toegankelijk te maken? zonder gebruik te maken van global $a;meer?


Antwoord 1, autoriteit 100%

De $GLOBALSarray kan in plaats daarvan worden gebruikt:

$GLOBALS['a'] = 'localhost';
function body(){
    echo $GLOBALS['a'];
}

Uit de handleiding:

Een associatieve array met verwijzingen naar alle variabelen die momenteel zijn gedefinieerd in het globale bereik van het script. De variabelenamen zijn de sleutels van de array.


Als je een set functies hebt die gemeenschappelijke variabelen nodig hebben, kan een klasse met eigenschappen een goede keuze zijn in plaats van een globale:

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

Antwoord 2, autoriteit 29%

Als de variabele niet verandert, kun je define

Voorbeeld:

define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');
function footer()
{
    echo FOOTER_CONTENT;
}

Antwoord 3, autoriteit 11%

Voeg je variabelen toe in $GLOBALS super global array zoals

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

en gebruik het wereldwijd

of u kunt een constante gebruiken die in het hele script toegankelijk is

define('HOSTNAME', 'localhost');  

Antwoord 4, autoriteit 11%

Als een variabele buiten een functie wordt gedeclareerd, heeft deze al een globaal bereik. U hoeft dus geen aangifte te doen. Maar van waaruit u deze variabele aanroept, moet u toegang hebben tot deze variabele. Als u vanuit een functie belt, moet u het trefwoord globalgebruiken:

$variable = 5;
function name()
{
    global $variable;
    $value = $variable + 5;
    return $value;  
}

Het gebruik van een globaal trefwoord buiten een functie is geen fout. Als u dit bestand in een functie wilt opnemen, kunt u de variabele declareren als global.

config.php
global $variable;
$variable = 5;

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

Je kunt ook $GLOBALSgebruiken. Het is een superglobaal, dus het heeft overal toegang.

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

Afhankelijk van uw keuze kunt u een van beide kiezen.


Antwoord 5, autoriteit 3%

Dit antwoord is erg laat, maar wat ik doe is een klasse instellen die Booleans, arrays en beginwaarden van gehele getallen bevat als statische variabelen voor het globale bereik. Alle constante strings worden als zodanig gedefinieerd.

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

De statictrefwoorden moeten aanwezig zijn in de klasse, anders worden de vars $a, $b en $c niet globaal bestreken.


Antwoord 6, autoriteit 2%

Je kunt het trefwoord useproberen in Closure-functies of Lambdasals dit past bij je bedoeling… PHP 7.0 echter. Niet dat het beter is, maar gewoon een alternatief.

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

demo|
info


Antwoord 7, autoriteit 2%

Je hebt dit beantwoord op de manier waarop je de vraag hebt geschreven – gebruik ‘definiëren’. maar eenmaal ingesteld, kunt u een definitie niet meer wijzigen.

Als alternatief zijn er trucs met een constante in een klasse, zoals class::constant die je kunt gebruiken. Je kunt ze ook variabel maken door statische eigenschappen aan de klasse te declareren, met functies om de statische eigenschap in te stellen als je deze wilt wijzigen.


Antwoord 8

Laten we een beetje anders denken. U kunt statische parameters gebruiken:

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

En je kunt het overalgebruiken en aanpassen, zoals:

function func() {
    echo global::$foo;
}

Antwoord 9

Wat als u de procedurele functie gebruikt in plaats van de variabele en ze waar dan ook aanroept.

Ik maak meestal een verzameling configuratiewaarden en plaats deze in een functie met een return-statement. Ik neem alleen dat op waar ik gebruik moet maken van globale waarde en een bepaalde functie moet aanroepen.

function host()
{
   return "localhost";
}

Antwoord 10

$GLOBALS[]isde juiste oplossing, maar aangezien we het over alternatieven hebben, kan een functie dit werk ook gemakkelijk doen:

function capital() {
    return my_var() . ' is the capital of Italy';
}
function my_var() {
    return 'Rome';
}

Other episodes