Maison développement back-end tutoriel php PHP中static关键字原理的学习研究分析_php技巧

PHP中static关键字原理的学习研究分析_php技巧

May 17, 2016 am 09:16 AM
static

看PHP手册的时候发现了下面这样一段代码:

复制代码 代码如下:

function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count Test();
}
$count--;
}
?>

执行结果如下:
这是一个递归的函数,声明的静态变量count记录次数,输出1~10。
我在看的时候有个疑惑,递归调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?带着这个疑问和同事研究了一下,测试用代码如下:
复制代码 代码如下:

echo 'start
';
static $a = 10;
echo "$a
";
unset($GLOBALS['a']);
echo "$a
";
static $a = 20;
echo "$a
";
$GLOBALS['a'] = 10;
echo "$a
";
static $a = 30;
echo "$a
";
unset($GLOBALS['a']);
echo "$a
";
static $a;
echo "$a
";
static $a = 40;
echo "$a
";
$a = 100;
echo "$a
";
static $a = 50;
echo "$a
";
static $a = 4;
echo "$a
";
echo 'end
';
exit;
?>

执行结果如下:
start
  1. Notice: Undefined variable: a 
  2. 10 
  3. 10 
  4. Notice: Undefined variable: a 
  5. 10 
  6. 10 
  7. 100 
  8. 100 
  9. 100 
  10. end
(结果中关于文件位置的部分已删去。也可以去掉echo语句使用zend的debug功能查看,这样结果更清晰)

代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。

第10行再次输出时,输出结果仍是4而不是20,有两种可能,一个是php再次初始化了$a的值,另一种是php使用了$a被销毁前的值,这个问题在第20行输出的时候解决。第16行$a销毁的时候值为10,第19行声明后输出仍为10。

第11行将$a的值修改为10,在14行再次声明$a,17行输出认为10。推测为重复声明时php还是使用静态变量内存中的值,而不再次赋值。

至此,手册中发现的问题,大致上已经解决了,即递归调用中的声明没有改变$count的值,所以递归在$count=10时成功停止。

可能有理解不正确的地方,欢迎拍砖。
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la fonction et l'utilisation de static en langage C Quelle est la fonction et l'utilisation de static en langage C Jan 31, 2024 pm 01:59 PM

Le rôle et l'utilisation de la statique en langage C : 1. Portée de la variable 2. Cycle de vie 3. Fonction interne 4. Modifier la fonction 6. Autres utilisations ; S'il y a le mot-clé static avant une variable, alors la portée de la variable est limitée au fichier dans lequel elle est déclarée. En d'autres termes, la variable est une "portée au niveau du fichier", ce qui est très utile pour empêcher le ". problème de définition de duplication des variables ; 2. Cycle de vie, les variables statiques sont initialisées une fois lorsque le programme commence à s'exécuter et détruites à la fin du programme, etc.

Comment utiliser static, this, super et final en Java Comment utiliser static, this, super et final en Java Apr 18, 2023 pm 03:40 PM

1. static Veuillez d'abord regarder le programme suivant : publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello, world!");//(2)}} J'ai vu ça Les programmes de segments sont familiers à la plupart des personnes ayant étudié Java. Même si vous n’avez pas appris Java mais que vous avez appris d’autres langages de haut niveau, comme le C, vous devriez être capable de comprendre la signification de ce code. Il affiche simplement "Bonjour tout le monde" et n'a aucune autre utilité. Cependant, il montre l'objectif principal du mot-clé statique.

Scénarios d'application pratiques et compétences d'utilisation du mot-clé statique en langage C Scénarios d'application pratiques et compétences d'utilisation du mot-clé statique en langage C Feb 21, 2024 pm 07:21 PM

Scénarios d'application pratiques et compétences d'utilisation du mot-clé static en langage C 1. Présentation static est un mot-clé en langage C, utilisé pour modifier des variables et des fonctions. Sa fonction est de modifier son cycle de vie et sa visibilité pendant l'exécution du programme, rendant les variables et les fonctions statiques. Cet article présentera les scénarios d'application réels et les techniques d'utilisation du mot-clé static, et l'illustrera à travers des exemples de code spécifiques. 2. Les variables statiques prolongent le cycle de vie des variables. L'utilisation du mot-clé static pour modifier les variables locales peut prolonger leur cycle de vie.

Le rôle de la statique Le rôle de la statique Jan 24, 2024 pm 04:08 PM

Les fonctions de statique : 1. Variables ; 2. Méthodes ; 3. Classes ; 4. Autres utilisations ; 5. Environnement multithread ; 7. Mode Singleton ; Optimisation de la disposition de la mémoire ; 11. Évitez les initialisations répétées ; 12. Utilisation dans les fonctions. Introduction détaillée : 1. Variables, variables statiques Lorsqu'une variable est déclarée comme statique, elle appartient au niveau classe, pas au niveau instance, ce qui signifie que quel que soit le nombre d'objets créés, une seule variable statique existe, et tous les objets. partagez ces variables statiques et ainsi de suite.

Comment utiliser les modificateurs Java abstrait, statique et final Comment utiliser les modificateurs Java abstrait, statique et final Apr 26, 2023 am 09:46 AM

Modificateur abstract (abstract) 1. Abstract peut modifier une classe (1) La classe modifiée par abstract est appelée une classe abstraite (2) Syntaxe : abstractclass class name {} (3) Caractéristiques : Les classes abstraites ne peuvent pas créer d'objets séparément, mais elles peuvent être déclaré Référencer le nom de référence du nom de la classe abstraite ; (4) Les classes abstraites peuvent définir des variables membres et des méthodes membres (5) Les classes abstraites ont des constructeurs lorsqu'elles sont utilisées pour créer des objets de sous-classe, jvm crée un objet de classe parent par défaut ; apply Appliqué lorsque jvm crée un objet de classe parent. 2. Abstract peut modifier les méthodes (1) La méthode modifiée par asbtract est appelée une méthode abstraite (2) Syntaxe : valeur de retour abstraite du modificateur d'accès

Comment Springboot lit les fichiers professionnels personnalisés et injecte des variables statiques Comment Springboot lit les fichiers professionnels personnalisés et injecte des variables statiques May 30, 2023 am 09:07 AM

Springboot lit le fichier pro et injecte des variables statiques statiques mailConfig.properties#Server mail.host=smtp.qq.com#Port number mail.port=587#Email account mail.userName=hzy_daybreak_lc@foxmail.com#Email authorisation code mail. passWord =vxbkycyjkceocbdc#Délai mail.timeout=25000#Sender mail.emailForm=hzy_daybreak_lc@foxmail.com#Sender mai

Quelle est la méthode statique de php Quelle est la méthode statique de php Oct 31, 2022 am 09:40 AM

Le "static" dans les méthodes statiques php signifie que ces propriétés et méthodes peuvent être appelées directement sans instancier la classe ; static est un mot-clé utilisé pour modifier les propriétés et les méthodes de la classe, et sa syntaxe d'utilisation est telle que "class Foo { public static $my_static = 'bonjour';}".

Syntaxe spéciale en PHP : mots-clés statiques, finaux, abstraits et autres Syntaxe spéciale en PHP : mots-clés statiques, finaux, abstraits et autres May 11, 2023 pm 04:00 PM

PHP est un langage de script open source côté serveur largement utilisé dans le développement Web. Le langage PHP est non seulement facile à apprendre et à utiliser, mais il prend également en charge une variété de paradigmes de programmation, programmation orientée objet, programmation fonctionnelle, etc. En PHP, il existe des mots-clés de syntaxe spéciaux, tels que Static, Final, Abstract, etc., qui ont des fonctions spéciales dans la programmation orientée objet. Cet article présentera ces mots-clés en détail. Mot-clé Static En PHP, le mot-clé Static a deux utilisations

See all articles