Maison  >  Article  >  développement back-end  >  Explication détaillée des variables membres statiques php et de l'initialisation des variables statiques

Explication détaillée des variables membres statiques php et de l'initialisation des variables statiques

伊谢尔伦
伊谢尔伦original
2017-06-30 11:33:112168parcourir

Membres

static  : les membres de la classe static ajoutent le modificateur static, qui est un membre statique You. peut utiliser directement le nom de classe + le nom du membre statique pour accéder à ce membre statique. Étant donné que les membres statiques existent en mémoire, les membres non statiques doivent être instanciés avant que la mémoire ne soit allouée, de sorte que les membres statiques ne peuvent pas accéder aux membres non statiques. mémoire, ce ne sont pas des membres statiques qui peuvent accéder directement aux membres statiques de la classe.

1 Variables globales statiques

Définition : Avant la variable globale, ajoutez le mot clé static. La variable est définie comme une variable globale statique.

Caractéristiques :

A. Cette variable alloue de la mémoire dans la zone de données globale.

B. Initialisation : si elle n'est pas explicitement initialisée, elle sera implicitement initialisée à 0 (les variables automatiques sont aléatoires sauf si elles sont explicitement initialisées).

C. La variable d'accès n'est visible que dans le fichier source à proprement parler, elle doit commencer au point de définition et se terminer dans ce fichier.

2. Variables locales statiques

Caractéristiques :

A. données Allouer de la mémoire.

B. Initialisation : s'il n'est pas explicitement initialisé, il sera implicitement initialisé à 0 et les appels fonction suivants ne seront plus initialisés.

C. Il réside toujours dans la zone de données globales jusqu'à la fin du programme. Mais sa portée est une portée locale. Lorsque le bloc de fonction ou d'instruction qui le définit prend fin, sa portée prend fin.

Les membres de données statiques suivent les mêmes règles d'accès publiques, protégées et privées que les membres de données ordinaires

Étant donné que les membres de données statiques allouent de la mémoire dans la zone de données globale, tous les objets appartenant à cette classePartagée, elle n'appartient donc pas à un objet de classe spécifique. Sa portée est visible lorsqu'aucun objet de classe n'est généré, c'est-à-dire lorsqu'aucune instance de la classe n'est générée, nous pouvons l'exploiter ; Initialisation des membres et données générales L'initialisation des membres est différente. Le format d'initialisation des membres de données statiques est :

type de données::=

Les données statiques membres d'une classe ont deux formulaires d'accès :

. ou  : : <Nom du membre de données statiques>

Si les droits d'accès du membre de données statiques sont autorisés (c'est-à-dire les membres publics), vous pouvez référence dans le programme selon le format ci-dessus, les membres de données statiques

les membres de données statiques sont principalement utilisés lorsque chaque objet a le même attribut . Par exemple, pour une classe de dépôt, le taux d'intérêt pour chaque instance est le même. Par conséquent, les intérêts doivent être définis en tant que données membres statiques de la classe de dépôt. Cela présente deux avantages. Premièrement, quel que soit le nombre d'objets de classe de dépôt définis, les membres des données d'intérêt partagent tous la mémoire allouée dans la zone de données globale, ce qui permet d'économiser de l'espace de stockage. Deuxièmement, une fois que les intérêts doivent être modifiés, tant qu'ils sont modifiés une fois, les intérêts de tous les objets de dépôt seront modifiés

Initialisation des variables statiques

Par exemple :

class A { 
public $f1 = 'xxxx'; 
static public $f2 = 100; 
}

Si vous souhaitez affecter une variable à un objet, elle ne peut être initialisée que dans le constructeur, par exemple :

class A { 
private $child; 
public function construct() { 
$this->child = new B(); 
} 
}

Mais il n'y a pas statique en PHP similaire à celui des éléments Java Constructor/static block, il n'y a pas de moment approprié pour les initialiser.
Il existe des moyens de résoudre le problème pour les membres partagés, par exemple :

class A { 
static public $child; 
} 
A::$child = new B();

Il ne semble pas y avoir de méthode propre pour les membres privés, la seule façon est de le faire :

class A { 
static private $child; 
static public initialize() { 
self::$child = new B(); 
} 
} 
A::initialize();

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