Portée des variables PHP et variables globales (tutoriel graphique)

亚连
Libérer: 2023-03-26 10:38:02
original
1838 Les gens l'ont consulté

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 = &#39;hello,world&#39;;
     abc(); //这里什么都不输出,因为访问不到$test变量
    function abc(){            echo($test);
    }?>
Copier après la connexion

global et $GLOBALS[]

Nous pouvons utiliser le mot-clé global pour déclarer des variables L'exemple ci-dessus devient comme ceci

$test = &#39;hello,world&#39;;
     abc(); 
    function abc(){        global $test;            echo $test;
    }
Copier après la connexion

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 = &#39;hello,world&#39;;    function abc(){        echo $GLOBALS[&#39;test&#39;];
    }
    abc();
Copier après la connexion

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[&#39;v3&#39;] =& $GLOBALS[&#39;v1&#39;]; 
} 
$v1 = 1; 
$v2 = $v3 = 0; 
test1(); 
echo $v2 ."\n"; 
test2(); 
echo $v3 ."\n";
Copier après la connexion

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;
Copier après la connexion

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(&#39;name&#39; => &#39;gbw&#39;);$test2 = function () use($ob){
    var_dump($ob);
};$test2();
Copier après la connexion

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 :

Tout est fait en un seul geste, l'utilisation et la différence d'utilisation dans les fonctions de fermeture en PHP, et la signification de & référence seront répondues en détail pour vous

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal