Maison  >  Article  >  développement back-end  >  Explication détaillée des variables statiques en PHP

Explication détaillée des variables statiques en PHP

小云云
小云云original
2018-03-16 13:52:361814parcourir

Le spécificateur de type de variable statique est statique. Les variables statiques appartiennent à la méthode de stockage statique et leur espace de stockage est la zone de données statiques de la mémoire (les unités de stockage sont allouées dans la zone de stockage statique). Les données de cette zone occupent toujours ces espaces de stockage pendant toute la durée d'exécution de la variable statique. programme (pendant toute la durée d'exécution du programme ne sont pas libérés), on peut également considérer que son adresse mémoire reste inchangée jusqu'à la fin de l'ensemble du programme (au contraire, alors que les variables automatiques automatiques, c'est-à-dire les variables locales dynamiques, appartiennent à la catégorie de stockage dynamique, occupent de l'espace de stockage dynamique et sont libérées une fois l'appel de fonction terminé). Bien que les variables statiques existent toujours tout au long de l'exécution du programme, elles ne peuvent pas être utilisées en dehors de son cadre.

De plus, les variables appartenant à la méthode de stockage statique ne sont pas nécessairement des variables statiques. Par exemple : bien que les variables externes (appelées variables globales en PHP) soient des méthodes de stockage statiques, elles ne sont pas nécessairement des variables statiques. Elles doivent être définies par static avant de pouvoir devenir des variables externes statiques ou des variables globales statiques.

Toutes les variables globales sont des variables statiques, et les variables locales ne sont des variables statiques locales que lorsqu'elles sont définies avec le modificateur de type static.

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). Autrement dit, la variable ne peut être utilisée que dans la fonction dans laquelle elle est définie. La portée des deux est la même ; la différence entre les deux est que la variable automatique existe et disparaît lorsque la fonction est appelée et. se termine, alors que la variable locale de classe statique n'existera pas, que la fonction dans laquelle elle se trouve 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 réaffectée, ce qui équivaut à l'exécution d'une instruction d'affectation.

3. L'expression d'initialisation des variables locales statiques doit être une expression constante ou 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 deux est la suivante :

1. La portée des variables globales non statiques est l'ensemble du programme source. Lorsqu'un programme source est constitué de plusieurs fichiers sources, la portée des variables non statiques est la suivante. variables globales statiques Les variables sont valides dans tous les fichiers 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 d'être 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 celui-ci et les variables de pile et les variables de tas.

3. Application en PHP

<?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
?>

Recommandations associées :

php : Analyse de la différence entre les variables statiques et les variables ordinaires

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

Variables statiques statiques de 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