190 votes

Comment déclarer une variable globale en php ?

J'ai un code comme celui-ci :

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

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

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

Y a-t-il un moyen de définir la variable globale à un endroit et de faire en sorte que la variable $a accessible dans toutes les fonctions à la fois ? sans faire usage de global $a; plus ?

15 votes

Non, il n'y en a pas. Si vous n'aimez pas le global envisagez d'utiliser le mot-clé $GLOBALS['a'] superglobal dans tous les scopes, ou envisagez de passer le paramètre à vos fonctions.

5 votes

S'il s'agit de quelque chose d'important, même une variable de session peut être utilisée.

285voto

MrCode Points 34968

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

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

function body(){

    echo $GLOBALS['a'];
}

De la Manuel :

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


Si vous avez un ensemble de fonctions qui ont besoin de certaines variables communes, une classe avec des propriétés peut être 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);

84voto

Dale Points 5900

Si la variable ne va pas changer, vous pouvez utiliser define

Exemple :

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

function footer()
{
    echo FOOTER_CONTENT;
}

2 votes

Que se passe-t-il lorsque FOOTER_CONTENT est tenté de modifier ? Est-ce que c'est comme final en Java ou const en C, C++ et C# ?

5 votes

Si vous essayez de définir FOOTER_CONTENT une deuxième fois, php affichera un avis à ce sujet.

0 votes

J'avais besoin de calculer l'heure actuelle de l'époque Unix à chaque fois qu'une page est chargée, puis d'utiliser cette valeur dans quelques calculs (fonctions). "define" a fonctionné pour moi. Au départ, je n'ai pas vu que "echo FOOTER_CONTENT ;" n'était pas précédé d'un '$' et j'ai eu des erreurs.

32voto

Pankaj Khairnar Points 1551

Ajoutez vos variables dans le super tableau global $GLOBALS comme suit

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

et l'utiliser globalement

ou vous pouvez utiliser des constantes qui sont accessibles tout au long du script.

define('HOSTNAME', 'localhost');

3 votes

Si vous utilisez 'define', une fois défini, vous ne pouvez pas changer une définition !

0 votes

Dans votre premier exemple, il est dit que la '$variable est maintenant appelée 'localhost' plus tard dans le script ?

0 votes

Non si vous voulez utiliser cette variable vous devez l'utiliser comme $GLOBALS['variable'] ;

5voto

Robbie Points 9099

Vous avez répondu à cette question de la manière dont vous l'avez rédigée - utilisez "define". Mais une fois défini, vous ne pouvez pas modifier un define.

Alternativement, il existe des astuces avec une constante dans une classe, comme 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 voulez la modifier.

1voto

George Points 16824

Non, vous devez rendre cette variable globale dans toutes les fonctions dans lesquelles vous voulez l'utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X