Les membres de données statiques, tels que la variable "i" dans le code fourni, nécessitent un traitement spécial lors de l'initialisation. Il est important de comprendre la distinction entre un initialiseur, qui attribue une valeur, et une définition, qui déclare l'existence de la variable.
Dans l'exemple de code, les données statiques le membre "i" est initialisé en dehors de la définition de la classe. C'est une exigence car une définition doit fournir une adresse en mémoire pour la variable, qui ne peut pas être déterminée dans la définition de classe elle-même.
D'un autre côté, un initialiseur attribue simplement une valeur à la variable sans spécifier son adresse. Cela permet de définir de manière concise une valeur initiale en un seul endroit, évitant ainsi d'avoir à la répéter dans les constructeurs.
Membres de données non statiques, comme "normalValue " dans l'exemple, existent dans les instances de la classe. Leurs adresses dépendent de l'instance à laquelle ils appartiennent. Par conséquent, des définitions de membres de données non statiques sont créées lors de la création d'instances.
En revanche, les membres de données statiques ont une adresse fixe et existent indépendamment de toute instance. Pour garantir qu'ils obtiennent une adresse unique, l'éditeur de liens nécessite exactement une définition pour chaque membre de données statiques. Étant donné que les définitions de classe sont généralement incluses dans plusieurs fichiers objets, la définition de membres de données statiques au sein de la classe violerait cette exigence.
Pour résoudre ce problème, les définitions de membres de données statiques doivent être placé en dehors de la déclaration de classe. Cela garantit qu'ils apparaissent dans un seul fichier objet, permettant à l'éditeur de liens d'attribuer une adresse appropriée.
Le concept de définition de données membres statiques en dehors de la classe est similaire à la déclaration variables externes. Une déclaration externe indique que la variable est définie ailleurs dans le programme. De même, les déclarations de données membres statiques dans la définition de classe peuvent être considérées comme des déclarations externes, la définition réelle étant fournie séparément.
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!