Maison > Article > développement back-end > Portée des variables PHP et variables globales (tutoriel graphique)
En tant que langage interprété de script, PHP a les caractéristiques de variables faibles et les caractéristiques de libération de ressources après exécution. L'ajout puissant de PHP7 a déclenché un fort tourbillon parmi les langages back-end. D'accord, comme je ne prête généralement pas beaucoup d'attention à la portée des variables, écrire cet article peut donc être considéré comme un rappel.
En tant que langage interprété pour les scripts, HP a les caractéristiques de variables faibles et la capacité de libérer des ressources après exécution. L'ajout important de PHP7 a fait sensation parmi les langages back-end. . Un fort tourbillon. Eh bien, comme je ne prête généralement pas beaucoup d’attention à la portée des variables, écrire cet article peut être considéré comme un rappel.
Les fonctionnalités grammaticales de PHP sont également similaires à celles du C++. De plus, les variables globales telles que $_POST et $FILE et les variables magiques telles que construct() et destruct() rendent le développement plus pratique.
Mais certaines personnes ne sont pas habituées à la portée des variables en PHP. En PHP, les variables de fonction et le monde global sont complètement isolés, c'est-à-dire qu'elles ne peuvent pas accéder les unes aux autres.
<?php $test = 'hello,world'; abc(); //这里什么都不输出,因为访问不到$test变量 function abc(){ echo($test); }?>
global et $GLOBALS[]
Nous pouvons utiliser le mot-clé global pour déclarer des variables L'exemple ci-dessus devient comme ceci
$test = 'hello,world'; abc(); function abc(){ global $test; echo $test; }
C'est bon, la deuxième façon d'accéder aux variables dans la portée globale consiste à utiliser un tableau $GLOBALS personnalisé PHP spécial. L'exemple précédent peut être écrit comme suit :
$test = 'hello,world'; function abc(){ echo $GLOBALS['test']; } abc();
Je pensais à l'origine que global et $GLOBALS étaient identiques, à l'exception des différentes méthodes d'écriture. Cependant, dans les applications pratiques, j'ai trouvé que la différence entre les deux est. toujours très gros ! Regardez cet exemple :
function test1() { global $v1, $v2; $v2 =& $v1; } function test2() { $GLOBALS['v3'] =& $GLOBALS['v1']; } $v1 = 1; $v2 = $v3 = 0; test1(); echo $v2 ."\n"; test2(); echo $v3 ."\n";
Pourquoi ceci :
Le résultat
ne devrait pas être deux cinq ? Nous regardons un exemple
function test() { global $a; unset($a); } $a = 1; test(); echo $a;
Le résultat
est évidemment non défini, pourquoi est-il toujours imprimé ?
Comme nous le savons tous, notre fonction est toujours une variable privée. Unset fonctionne. Elle supprime une valeur globale et global génère une variable alias dans la fonction qui pointe vers la variable externe de la fonction, pas vers la fonction réelle. Variables externes ; $GLOBALS[] est en effet appelée une variable externe, et elle sera toujours cohérente à l'intérieur et à l'extérieur de la fonction !
use()
Pensez-vous que votre compréhension de use() consiste toujours à utiliser namespace ? pour les noms de classe, ou utilisez des alias pour les noms d'espace de noms. Les alias sont implémentés via l'opérateur .
Mais ce dont nous parlons aujourd'hui, c'est de cette forme : function use(){}
php5.3Nouvelle syntaxe de fermeture,
//普通 $a="hello,world!";$test = function () use($a){ echo $a; }; $test();//引用 对象 $ob=(object)array('name' => 'gbw');$test2 = function () use($ob){ var_dump($ob); };$test2();
Fermeture PHP Les fonctionnalités sont pas trop surprenant. En fait, des fonctions similaires, voire plus puissantes, peuvent être obtenues en utilisant CLASS, ce qui n'est pas comparable aux fermetures js. Cette façon d’écrire n’est donc pas très courante.
Articles connexes :
Explication détaillée du tutoriel sur les mots-clés de classe et de méthode PHP
Méthode d'utilisation détaillée dans la fonction de fermeture PHP() use()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!