Comprendre les membres statiques en PHP

DDD
Libérer: 2024-09-13 06:22:31
original
845 Les gens l'ont consulté

Understanding Static Members in PHP

En PHP, les membres statiques (méthodes et propriétés) appartiennent à la classe elle-même, et non à des objets individuels. Cela signifie que vous pouvez y accéder sans créer d'instance de la classe. Les membres statiques sont utiles lorsque vous souhaitez partager des données ou des fonctionnalités sur plusieurs objets. PHP fournit trois mots-clés pour accéder aux méthodes et propriétés statiques : self::, parent:: et static::. Chacun fonctionne différemment, notamment lors de l'utilisation de l'héritage. Dans cet article, nous expliquerons le fonctionnement de ces mots-clés et montrerons leurs différences avec des exemples.

Quand utiliser des membres statiques

  • Variables globales : Les propriétés statiques peuvent être utilisées comme variables globales au sein d'une classe, accessibles à toutes les instances.

  • Méthodes utilitaires : Les méthodes statiques peuvent fournir des fonctions utilitaires indépendantes des objets individuels.

  • Constantes au niveau de la classe : Les propriétés statiques peuvent être utilisées pour définir des constantes au niveau de la classe.

  • Modèle Singleton : Les méthodes et propriétés statiques sont essentielles à la mise en œuvre du modèle Singleton.

Appel de méthodes statiques

Pour appeler une méthode statique, vous utilisez l'opérateur :: suivi du nom de la méthode. Voici un exemple :

class MyClass {
    public static function greet() {
        echo "Hello, world!";
    }
}

MyClass::greet(); // Output: Hello, world!
Copier après la connexion

Appel de propriétés statiques

Pour accéder à une propriété statique, vous utilisez également l'opérateur :: suivi du nom de la propriété. Voici un exemple :

class MyClass {
    public static $count = 0;

    public static function incrementCount() {
        self::$count++;
    }
}

MyClass::incrementCount();
echo MyClass::$count; // Output: 1
Copier après la connexion

Les trois mots-clés : self : , parent : et static : 

  1. soi ::
    Le mot-clé self:: fait référence à la classe dans laquelle le code est écrit. Cela ne prend pas en compte l'héritage, ce qui signifie que si une classe enfant remplace une méthode ou une propriété statique, self:: fera toujours référence à la classe parent où le code est défini.

  2. parent::
    Le mot-clé parent:: est utilisé pour appeler une méthode ou une propriété statique à partir de la classe parent immédiate. Il contourne toutes les méthodes remplacées dans la classe enfant, garantissant ainsi que la méthode ou la propriété du parent est utilisée.

  3. statique ::
    Le mot-clé static:: fonctionne de la même manière que self::, mais il prend en compte la liaison statique tardive. Cela signifie que si une méthode ou une propriété statique est remplacée dans une classe enfant, static:: fera référence à la méthode ou à la propriété de la classe la plus dérivée, même si elle est appelée depuis une classe parent.

Exemples pour montrer les différences

Voyons comment chacun de ces mots-clés se comporte dans un programme PHP avec héritage.

Exemple 1 : Utiliser soi : 

class A {
    public static function sayHello() {
        return "Hello from A";
    }

    public static function test() {
        return self::sayHello();
    }
}

class B extends A {
    public static function sayHello() {
        return "Hello from B";
    }
}

echo B::test(); // Output: "Hello from A"
Copier après la connexion

Dans cet exemple, self:: dans la classe A fait référence à la méthode sayHello() dans A. Même si la classe B remplace la méthode, self:: appelle la méthode de la classe parent, produisant le résultat "Bonjour de A."

Exemple 2 : Utilisation de parent : 

class A {
    public static function sayHello() {
        return "Hello from A";
    }
}

class B extends A {
    public static function sayHello() {
        return parent::sayHello() . " and B";
    }
}

echo B::sayHello(); // Output: "Hello from A and B"
Copier après la connexion

Dans cet exemple, la classe B appelle parent::sayHello() pour inclure le message de la classe parent A, puis ajoute son propre message. Le résultat est "Bonjour de A et B."

Exemple 3 : Utilisation de static : 

class A {
    public static function sayHello() {
        return "Hello from A";
    }

    public static function test() {
        return static::sayHello();
    }
}

class B extends A {
    public static function sayHello() {
        return "Hello from B";
    }
}

echo B::test(); // Output: "Hello from B"
Copier après la connexion

Ici, static:: dans la classe A fait référence à la méthode sayHello() dans la classe la plus dérivée, qui est B. En effet, static:: permet une liaison statique tardive et la méthode de la classe B est appelée, ce qui entraîne "Bonjour de B."

Différences clés

  • self:: : fait référence à la classe dans laquelle il est utilisé, en ignorant l'héritage. Ceci est utile lorsque vous ne souhaitez pas que les méthodes des classes enfants affectent la méthode appelée.

  • parent:: : appelle spécifiquement des méthodes ou des propriétés de la classe parent, même si elles sont remplacées dans la classe enfant. C'est utile pour étendre les fonctionnalités d'une classe parent tout en ayant besoin d'accéder aux méthodes d'origine.

  • static:: : Active la liaison statique tardive, ce qui signifie qu'elle fait référence à la méthode ou à la propriété de la classe la plus dérivée au moment de l'exécution, même si elle est appelée depuis une classe parent. C'est utile pour les situations où vous souhaitez que le comportement s'adapte en fonction de la classe appelante.

Comprendre les différences entre self::, parent:: et static:: permet d'écrire du code PHP plus robuste et maintenable, en particulier dans les systèmes orientés objet complexes.

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!

source:dev.to
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!