Maison  >  Article  >  développement back-end  >  Explication détaillée de la différence entre les variables locales statiques statiques et les variables globales statiques

Explication détaillée de la différence entre les variables locales statiques statiques et les variables globales statiques

伊谢尔伦
伊谢尔伦original
2017-05-08 10:56:3915168parcourir

Les

Variables locales peuvent être divisées en types de stockage dynamiques et types de stockage statiques en termes de méthodes de stockage. Les variables locales dans une fonction, à moins qu'elles ne soient spécifiquement déclarées comme classe de stockage statique, alloueront l'espace de stockage dynamiquement par défaut. Les variables dynamiques internes sont automatiquement libérées après l'appel de la fonction. Si vous souhaitez que les variables internes restent en mémoire après l'exécution de la fonction, vous devez utiliser des variables statiques. Une fois la fonction exécutée, les variables statiques ne disparaîtront pas, mais seront partagées entre tous les appels à la fonction. Autrement dit, lorsque la fonction sera à nouveau exécutée, les variables statiques continueront à fonctionner à partir des résultats précédents et ne seront plus actives. utilisée lors de l'exécution du script. La fonction période est initialisée lors du premier appel. Pour déclarer une variable de fonction comme statique, utilisez le mot-clé static.

Auparavant, nous avons introduit des variables locales dans le cadre des variables php et des variables globales dans le cadre des variables php. Les variables statiques peuvent être appliquées n'importe où. Une fois l'application réussie, elle n'acceptera plus d'autres applications similaires.

Les variables statiques ne signifient pas qu'elles ne peuvent pas changer leur valeur. Une quantité qui ne peut pas changer sa valeur est appelée une constante. La valeur qu'il détient est modifiable et elle restera à jour. On dit qu'elle est statique car elle ne change pas lorsque la fonction est appelée et se termine. Autrement dit, si nous attribuons une certaine valeur à une variable statique la dernière fois que la fonction est appelée, la valeur restera inchangée au prochain appel de la fonction.

1. Variables locales statiques :

1. Les variables internes de type statique sont les mêmes que les variables automatiques (c'est-à-dire les variables locales sans déclaration statique). sont certains La variable locale d'une fonction spécifique, c'est-à-dire que la variable ne peut être utilisée que dans la fonction dans laquelle la variable est définie. La portée des deux est la même, la différence entre les deux est que la variable automatique sera. exister et disparaître lorsque la fonction est appelée et se termine, tandis que la variable statique existera et disparaîtra lorsque la fonction est appelée et se terminera. Les variables locales de classe existeront toujours, que la fonction dans laquelle elles se trouvent soit appelée ou non ; cependant, même si la variable continue d’exister, elle ne peut pas être utilisée. Si la fonction qui la définit est à nouveau appelée, elle peut continuer à être utilisée et la valeur restante après l'appel précédent est enregistrée. Autrement dit, une variable interne de type statique est une variable qui ne peut être utilisée que dans une fonction spécifique, mais occupe toujours de l'espace de stockage.

2. Si une variable statique est initialisée lors de la définition d'une variable statique dans le corps de la fonction, le programme n'effectuera plus d'opérations d'initialisation à l'avenir (l'instruction d'initialisation de variable statique du type de base qui apparaît à l'intérieur de la fonction ne sera utilisé pour la première fois que lors de son appel. L'attribution de valeurs initiales aux variables automatiques est effectuée lors de l'appel de la fonction. Chaque fois que la fonction est appelée, la valeur initiale est à nouveau attribuée, ce qui équivaut à l'exécution d'une instruction d'affectation.

3. L'expression d'initialisation des variables locales statiques doit être une constante ou une expression constante. Même si une variable statique locale est définie sans valeur initiale, le système attribuera automatiquement une valeur initiale de 0 (pour les variables numériques) ou un caractère nul (pour les variables de caractères) ; Pour la variable automatique auto, si aucune valeur initiale n'est affectée, sa valeur sera une valeur incertaine.

4. Lorsqu'une fonction est appelée plusieurs fois et que les valeurs de certaines variables doivent être conservées entre les appels, des variables locales statiques peuvent être prises en compte. Bien que les variables globales puissent également être utilisées pour atteindre l'objectif ci-dessus, les variables globales provoquent parfois des effets secondaires inattendus (principalement causés par la portée de la variable), il est donc toujours préférable d'utiliser des variables statiques locales.

Remarque : les variables statiques locales prennent beaucoup de temps en mémoire et ont une mauvaise lisibilité. Par conséquent, essayez d'éviter d'utiliser des variables statiques locales sauf si cela est nécessaire.

2. Variables globales statiques

La déclaration d'une variable globale (variable externe) est précédée de static pour former une variable globale statique. Les variables globales elles-mêmes sont des méthodes de stockage statiques, et les variables globales statiques sont bien sûr également des méthodes de stockage statiques. Il n'y a aucune différence dans les méthodes de stockage entre les deux.

La différence entre les variables locales statiques statiques et les variables globales statiques

La différence entre les deux est :

1. La portée des variables globales non statiques est l'ensemble du programme source. Lorsqu'un programme source se compose de plusieurs fichiers source, les variables globales non statiques sont valides dans chaque fichier source.

2. Les variables globales statiques limitent leur portée, c'est-à-dire qu'elles ne sont valides que dans le fichier source dans lequel la variable est définie et ne peuvent pas être utilisées dans d'autres fichiers source du même programme source.

Comme le montre l'analyse ci-dessus————

La modification d'une variable locale en variable statique modifie sa méthode de stockage, c'est-à-dire sa durée de vie.

Changer une variable globale en variable statique modifie sa portée et limite son champ d'utilisation. les variables statiques statiques seront placées dans la zone de stockage globale du programme (c'est-à-dire dans la zone de données globales du programme, plutôt que allouées sur la pile, cela ne provoquera donc pas de débordement de pile) , afin que l'affectation d'origine puisse être conservée lors du prochain appel. C'est la différence entre cela et la variable de pile et la variable de tas.

L'exemple de code est le suivant :

<?php
//--------------如何理解static静态变量-----------
 
/** 普通局部变量 */
function local() {
    $loc = 0; //这样,如果直接不给初值0是错误的。
    ++$loc;
    echo $loc . &#39;<br>&#39;;
}
local(); //1
local(); //1
local(); //1
echo &#39;===================================<br/>&#39;;
 
/** static静态局部变量 */
function static_local() {
    static $local = 0 ; //此处可以不赋0值
    $local++;
    echo $local . &#39;<br>&#39;;
}
static_local(); //1
static_local(); //2
static_local(); //3
//echo $local; 注意虽然静态变量,但是它仍然是局部的,在外不能直接访问的。
echo &#39;=======================================<br>&#39;;
 
/** static静态全局变量(实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量) */
function static_global() {
    global $glo; //此处,可以不赋值0,当然赋值0,后每次调用时其值都为0,每次调用函数得到的值都会是1,但是不能想当然的写上"static"加以修饰,那样是错误的.
    $glo++;
    echo $glo . &#39;<br>&#39;;
}
static_global(); //1
static_global(); //2
static_global(); //3
?>

Ce qui précède est l'explication détaillée des variables locales statiques et des variables globales statiques.

【Tutoriels associés recommandés】

1. "php.cn Dugu Jiujian (4) - Tutoriel vidéo PHP "

2. Un ensemble complet de tutoriels vidéo sur la programmation PHP de l'entrée à la maîtrise

3

Tutoriels vidéo pratiques PHP.

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!

Déclaration:
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