web-dev-qa-db-fra.com

Comment déclarer une variable globale en php?

J'ai un code quelque chose comme ça:

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

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

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

est-il possible de définir la variable globale à un endroit et de rendre la variable $a accessible dans toutes les fonctions à la fois? sans utiliser global $a; plus?

144
LIGHT

Le $GLOBALS array peut être utilisé à la place:

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

function body(){

    echo $GLOBALS['a'];
}

Du Manuel :

Tableau associatif contenant des références à toutes les variables actuellement définies dans la portée globale du script. Les noms de variables sont les clés du tableau.


Si vous avez un ensemble de fonctions nécessitant des variables communes, une classe avec des propriétés peut constituer un bon choix au lieu d'un global:

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

Si la variable ne change pas, vous pouvez utiliser define

Exemple:

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

function footer()
{
    echo FOOTER_CONTENT;
}
71
Dale

Ajoutez vos variables dans le tableau super global $ GLOBALS comme 

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

et l'utiliser globalement

ou vous pouvez utiliser constante qui sont accessibles tout au long du script

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

Si une variable est déclarée en dehors d'une fonction, sa portée est déjà globale. Donc, il n'y a pas besoin de déclarer. Mais à partir de l'endroit où vous appelez cette variable, vous devez avoir accès à cette variable. Si vous appelez depuis une fonction, vous devez utiliser le mot clé global:

$variable = 5;

function name()
{
    global $variable;

    $value = $variable + 5;

    return $value;  

}

L'utilisation d'un mot clé global en dehors d'une fonction n'est pas une erreur. Si vous souhaitez inclure ce fichier dans une fonction, vous pouvez déclarer la variable sous la forme global.

config.php

global $variable;

$variable = 5;

other.php

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

Vous pouvez également utiliser $GLOBALS. C'est un superglobal donc il a accès partout.

$GLOBALS['variable'] = 5;

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

Selon votre choix, vous pouvez choisir l'un ou l'autre.

13
Sajidur Rahman

Cette réponse est très tardive, mais ce que je fais est de définir une classe contenant les valeurs booléennes, les tableaux et les valeurs initiales sous forme de variables statiques à portée globale. Toutes les chaînes constantes sont définies comme telles.

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

Les mots-clés static doivent être présents dans la classe, sinon les vars $ a, $ b et $ c ne seront pas globalement définis.

Vous pouvez essayer le mot clé use dans les fonctions Closure ou Lambdas si cela correspond à votre intention ... PHP 7.0 cependant. Ce n'est pas mieux, mais c'est une alternative.

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

démo | Info

4
Thielicious

Vous avez répondu à cela de la manière dont vous avez écrit la question - utilisez 'define'. mais une fois défini, vous ne pouvez pas changer de définition.

Alternativement, il existe des astuces avec une constante dans une classe, telles que class :: constant que vous pouvez utiliser. Vous pouvez également les rendre variables en déclarant des propriétés statiques à la classe, avec des fonctions pour définir la propriété statique si vous souhaitez la modifier.

4
Robbie

Que se passe-t-il si vous utilisez la fonction procédurale au lieu de variable et que vous les appelez comme vous.

Je fais habituellement une collection de valeurs de configuration et les mets dans une fonction avec l'instruction return. Je viens d'inclure cela là où je dois utiliser la valeur globale et appeler une fonction particulière.

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

Pensons un peu différent:

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

Et vous pouvez l’utiliser et le modifier à votre guise, comme:

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