Maison développement back-end Problème PHP Que sont les variables statiques dans les méthodes PHP

Que sont les variables statiques dans les méthodes PHP

Oct 25, 2021 am 09:31 AM
php variable statique

Les variables statiques en PHP n'existent que dans le cadre de la fonction, c'est-à-dire que les variables statiques ne vivent que sur la pile ; en PHP, tant que le mot-clé static est ajouté avant la variable, la variable devient une variable statique.

Que sont les variables statiques dans les méthodes PHP

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3

Quelles sont les variables statiques dans la méthode php ?

Explication détaillée des variables statiques et utilisation des variables statiques en PHP

Les variables statiques n'existent que dans le cadre de la fonction, c'est-à-dire que les variables statiques ne vivent que sur la pile. Généralement, les variables contenues dans les fonctions seront publiées après la fin de la fonction, comme les variables locales, mais pas les variables statiques. C’est-à-dire que la valeur de la variable sera conservée au prochain appel de cette fonction.

Tant que vous ajoutez le mot-clé static avant une variable, la variable devient une variable statique.

<?php
  function test()
  {
    static $nm = ;
    $nm = $nm * ;
    print $nm."<br />";
  }
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
?>
Copier après la connexion

Résultats d'exécution du programme :
1
2
2
4
3
8

Après l'exécution de la fonction test(), la valeur de la variable $nm est enregistrée.

Les propriétés statiques sont souvent utilisées dans les classes, telles que les membres statiques et les méthodes statiques.

Liste des programmes : membres statiques de la classe

La variable statique $nm appartient à la classe nowamagic, pas à une instance de la classe. Cette variable est valable pour toutes les instances.

:: est l'opérateur de limitation de portée. La portée self est utilisée ici à la place de la portée $this. La portée $this ne représente que l'instance actuelle de la classe, et self:: représente la classe elle-même.

<?php
  class nowamagic
  {
    public static $nm = ;
    function nmMethod()
    {
      self::$nm += ;
      echo self::$nm . &#39;<br />&#39;;
    }
  }
  $nmInstance = new nowamagic();
  $nmInstance -> nmMethod();
  $nmInstance = new nowamagic();
  $nmInstance -> nmMethod();
?>
Copier après la connexion

Résultats en cours d'exécution du programme :
1
3
2
5

Liste des programmes : propriétés statiques

<?php
  class NowaMagic
  {
    public static $nm = &#39;www.nowamagic.net&#39;;
    public function nmMethod()
    {
      return self::$nm;
    }
  }
  class Article extends NowaMagic
  {
    public function articleMethod()
    {
      return parent::$nm;
    }
  }
  // 通过作用于限定操作符访问静态变量
  print NowaMagic::$nm . "<br />";
  // 调用类的方法
  $nowamagic = new NowaMagic();
  print $nowamagic->nmMethod() . "<br />";
  print Article::$nm . "<br />";
  $nmArticle = new Article();
  print $nmArticle->nmMethod() . "<br />";
?>
Copier après la connexion

Résultats en cours d'exécution du programme :

www.nowamagic.net
www.nowamagic.net
www.nowamagic. net
www.nowamagic.net

Liste des programmes : Constructeur statique simple

PHP n'a pas de constructeur statique, vous devrez peut-être initialiser une classe statique, il existe une méthode très simple, appelez directement la démonstration de la classe après la méthode de définition de classe ().

<?php
function Demonstration()
{
  return &#39;This is the result of demonstration()&#39;;
}
class MyStaticClass
{
  //public static $MyStaticVar = Demonstration(); //!!! FAILS: syntax error
  public static $MyStaticVar = null;
  public static function MyStaticInit()
  {
    //this is the static constructor
    //because in a function, everything is allowed, including initializing using other functions
    self::$MyStaticVar = Demonstration();
  }
} MyStaticClass::MyStaticInit(); //Call the static constructor
echo MyStaticClass::$MyStaticVar;
//This is the result of demonstration()
?>
Copier après la connexion

Résultat de l'exécution du programme :

Ceci est le résultat de la démonstration()

Ce qui suit est une introduction à l'utilisation des variables statiques PHP

Le mot-clé statique est très courant dans la programmation C#, il est utilisé pour modifier les déclarations Membre statique qui appartient au type lui-même plutôt qu'à un objet spécifique. Le modificateur static peut être utilisé sur les classes, les champs, les méthodes, les propriétés, les opérateurs, les événements et les constructeurs, mais pas sur les indexeurs, les destructeurs ou les types autres que les classes. Les classes, fonctions et variables déclarées comme statiques ne pourront pas référencer des méthodes ou des variables d'instance. De plus, en C#, une fois le modificateur static ajouté à une classe, toutes les variables et méthodes qu'elle contient doivent être statiques. Les variables et méthodes statiques doivent être référencées via des noms de classe et non via des objets d'instance.

Alors quelles sont les différences entre le mot-clé static en PHP et C# ?

Portée de la déclaration

Par rapport à C#, la portée d'utilisation des variables statiques en PHP est plus large. Non seulement nous pouvons ajouter le modificateur static devant une classe, une méthode ou une variable, mais nous pouvons même ajouter le mot-clé static au mot-clé interne. variables de la fonction. La valeur d'une variable avec le modificateur statique ajouté ne sera pas perdue même après l'exécution de la fonction, c'est-à-dire que la variable se souvient toujours de sa valeur d'origine la prochaine fois que cette fonction est appelée. Par exemple :

<?php
function test()
{
  static $var=;
  $var+=;
  echo $var.&#39; &#39;;
}
test();
test();
test();
?>
Copier après la connexion

Les résultats d'exécution sont les suivants :

3 5 7

Une chose à noter ici est que l'opération d'affectation de la variable ne sera appelée que lorsque la variable est initialisée pour la première fois. exécution ultérieure de la fonction, Cette opération ne sera pas appelée.

Étant donné que les fonctions en PHP sont également des citoyens de premier ordre, contrairement à C#, nous pouvons définir directement des fonctions et les appeler directement n'importe où dans le code, ce qui est un peu similaire au javascript. Par conséquent, à l'heure actuelle, les variables statiques de fonction sont plus utiles que la définition de variables globales, ce qui peut éviter les conflits causés par des définitions répétées de variables. Étant donné que les fonctions en C# ne peuvent pas être directement définies et appelées, elles doivent être hébergées dans une classe. Par conséquent, si une fonction nécessite des variables statiques, il suffit de les définir dans la classe pour obtenir le même effet.

Méthode d'appel

En C#, la façon dont nous appelons les membres statiques est très simple et cohérente, car les membres statiques n'appartiennent pas à des objets d'instance, donc qu'il s'agisse d'une méthode ou d'une variable, C# accède toujours à ses membres statiques via le nom de la classe .method (variable). Et en C#, les fonctions statiques ne peuvent pas être définies comme méthodes virtuelles ou remplacées. PHP fournit un support plus flexible et diversifié pour cela.

Tout d'abord, nous savons que l'appel de méthodes d'instance en PHP est appelé via someobj->someFun(), pouvons-nous donc appeler des fonctions statiques via SomeClass->someFun() comme C# ? La réponse est non. En PHP, l'appel de membres statiques ne peut être effectué que via ::, tel que : SomeClass::someFun().

<?php
class TestC
{
  public static $var=;
  public $var=;
  function t()
  {
    self::$var+=;
    echo self::$var.&#39; &#39;;
    echo $this->var.&#39; &#39;;
  }
  public static function t()
  {
    self::$var+=;
    echo self::$var.&#39; &#39;;
  }
}
$t=new TestC();
$t->t();
TestC::t();
?>
Copier après la connexion
Copier après la connexion

Les résultats d'exécution sont les suivants :

3 1 5

Un autre point différent du C# est que dans la méthode de la classe, si nous devons appeler une variable statique, nous devons passer le self :: Variable statique $somVar (notez la variable Le signe $ devant n'est pas requis pour les variables d'instance), et l'appel d'une méthode statique est self::someFun() (le signe $ n'est pas requis ici). Comme dans l'exemple ci-dessus.

另外,与C#最大的不同之处就是,PHP中,子类是可以覆盖父类的静态函数或变量的,不仅如此,(站在C#程序员的角度来看,我觉得PHP这点反而将事情搞复杂了),由于默认self::staticFun()调用的是子类的静态函数,这个时候如果我们想调用父类的静态变量怎么办呢?这里PHP提供了额外的parent来调用基类的静态成员。如:

<?php
class TestC
{
  public static $var=;
  public $var=;
  function t()
  {
    self::$var+=;
    echo self::$var.&#39; &#39;;
    echo $this->var.&#39; &#39;;
  }
  public static function t()
  {
    self::$var+=;
    echo self::$var.&#39; &#39;;
  }
}
$t=new TestC();
$t->t();
TestC::t();
?>
Copier après la connexion
Copier après la connexion

运行结果如下:

3 5 ‘Hello'

最好,根据上面的例子我们很容易想到,子类访问父类可以使用parent关键字,那么父类如何访问子类的静态方法呢?这里给出static的另外一个用法,这里如果将调用的静态方法前面的作用域换成static的话,PHP会根据该类的继承层次来计算最终的静态方法。如:

<?php
class Test
{
  function t()
  {
    static::t();
  }
  public static function t()
  {
    echo self::&#39;Test &#39;;
  }
}
class Test extends Test
{
  static function t()
  {
    echo self::&#39;Test &#39;;
  }
}
$t=new Test();
$t->t();
Test::t();
?>
Copier après la connexion

运行结果如下:

Test2 Test2

这里t实例在t1方法调用t2静态方法时,会根据其实例找到最终的静态方法并输出Test2。

总结

从上面的分析,我们不难看出,对于静态成员的使用,PHP提供了比C#更为强大的功能或灵活性,但从我的角度来看,这种灵活性不见得就更好,从某种角度来看,如果类的继承层次过于复杂,它可能会让我产生混淆。当然,同样的工具不同人使用效果会完全不一样,既然PHP提供了更多样的选择,那么相信如果使用恰当的话,PHP中的static可能会提供比C#中更为强大而简便的使用方式。

推荐学习:《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 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)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles