Variables statiques dans les fonctions
Compréhension statique des variables statiques
variables statiques Le spécificateur de type est statique.
Les variables statiques appartiennent au stockage statique, et leur espace de stockage est la zone de données statiques dans la mémoire (les unités de stockage sont allouées dans la zone de stockage statique. Les données de cette zone occupent ces espaces de stockage tout au long du fonctionnement de). le programme. (Il n'est pas libéré pendant toute la durée du programme), et on peut également considérer que son adresse mémoire reste inchangée jusqu'à la fin de tout le programme (au contraire, les variables auto automatiques, c'est-à-dire locales dynamiques variables, appartiennent à la catégorie de stockage dynamique et occupent l'espace de stockage dynamique (fonctions libérées une fois l'appel 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 quantités appartenant aux méthodes de stockage statiques ne sont pas nécessairement des variables statiques. Par exemple : bien que les variables externes appartiennent à la méthode de stockage statique, 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'il est statique car il ne change pas lorsque la fonction est appelée ou 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.
Variables statiques dans la fonction
utilisation statique
1, veuillez consulter l'exemple suivant :
function doStuff(&$cache) { static $cache = null; if ($cache === null) { echo $cache = '%heavy database stuff or something%'; } } $cache = 'not null'; doStuff($cache); // Output %heavy database stuff or something%
Comme le montre l'exemple ci-dessus, le mot-clé static affecte le transfert de référence même si nous utilisons & pour essayer de changer la valeur et l'adresse de la variable $cache, cela n'affecte toujours pas le jugement if dans doStuff(). function;
De plus, dans la fonction doStuff(), la variable statique $cache n'est pas immuable, $cache passe de null à %des éléments de base de données lourds ou quelque chose comme ça%;
Statique méthodes dans la classe et attributs
● Nous considérons les classes comme des modèles pour générer des objets, et les objets comme des composants actifs. Nous instancions une classe, obtenons un objet, puis accédons aux méthodes et propriétés de cet objet. .
Par exemple $foo = new Foo(); $foo est l'objet après instanciation de la classe Foo.
● Les méthodes statiques sont des fonctions avec une classe comme portée. Nous pouvons accéder directement aux méthodes statiques sans instanciation
Par exemple :
class Foo() { public static function a(){} } // 访问a(); Foo::a();
● Les méthodes statiques ne sont pas accessibles aux propriétés ordinaires et. méthodes de cette classe, car ces propriétés et méthodes appartiennent à un objet, tandis que les méthodes et propriétés statiques sont également appelées méthodes de variables de classe.
● Pour accéder aux méthodes ou propriétés statiques de la classe actuelle (non-sous-classe), utilisez self::method(), remarque : self peut appeler des méthodes et propriétés statiques de la classe parent
Liaison statique retardée
Regardons d'abord un exemple
header("Content-type: text/html; charset=utf-8"); class A { public static function aa() { echo "非延迟静态绑定<br>"; } public static function bb() { echo self::aa(); // Output 非延迟静态绑定 echo static::aa(); // Output 延迟静态绑定 } } class B extends A { public static function aa() { echo "延迟静态绑定"; } public static function cc() { echo self::bb(); } } B::bb(); // Output 非延迟静态绑定 延迟静态绑定
Utilisez le mot-clé self pour faire référence à la classe actuelle (A), donc ce que vous obtenez est le aa( ) méthode de classe A Valeur de retour ;
Après php5.3, nous pouvons utiliser static pour obtenir la méthode aa() de la sous-classe, qui fait référence à la classe appelée.
Résumé :
La liaison retardée du mot-clé statique a de nombreuses utilisations, et elle peut généralement être résumée en le faisant dans le projet.
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!