Quelle est la différence entre self et static en php

青灯夜游
Libérer: 2023-03-09 14:20:02
original
3022 Les gens l'ont consulté

La différence entre self et static en PHP : self ne peut faire référence qu'aux méthodes de la classe actuelle, tandis que static permet aux appels de fonction de lier les méthodes de la classe appelante au moment de l'exécution.

Quelle est la différence entre self et static en php

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

La différence entre self et static en php

A travers quelques exemples, nous pouvons facilement voir la différence entre self et static. Supposons que nous ayons la classe Car – elle a deux méthodes, model et getModel. Notez que nous utilisons ici le mot-clé self.

class Car
{
    public static function model()
    {
         self::getModel();
    }

    protected static function getModel()
    {
        echo "I am a Car!";
    }

}
Copier après la connexion

Appelez la méthode statique

Car::model();
Copier après la connexion

et obtenez le résultat

I am a Car!
Copier après la connexion

Le mot-clé self nous amène à appeler la méthode getModel de la classe Car et à afficher le texte "Je suis un Voiture!".

Ensuite on ajoute une nouvelle classe, la classe Mercedes, qui hérite de la classe Car, le code est le suivant :

class Mercedes extends Car{

    protected static function getModel()
    {
        echo "I am a Mercedes!";
    }

}
Copier après la connexion

Quand on appelle Mercedes::model(), devinez quel est le résultat ?
Peut-être pensez-vous que le résultat sera :

I am a Mercedes!
Copier après la connexion
Copier après la connexion

Mais le résultat réel est :

I am a Car!
Copier après la connexion

Pourquoi est-ce ?

Explication de soi

Le principe de fonctionnement du mot-clé "self" est le suivant : il appellera la méthode de la classe actuelle (classe actuelle). Étant donné que la méthode model n’est définie que dans la classe Car, la classe actuelle est la classe Car pour elle. Self::getModel() dans le modèle appelle naturellement la méthode getModel dans la classe Car.

Ce comportement ne semble pas être ce que nous souhaitons et il n'est pas conforme aux principes de conception orientée objet. Comment le résoudre ? Vous pouvez utiliser le mot clé static.

Mot-clé statique et liaison statique tardive (liaison statique tardive)

Dans PHP5.3, une nouvelle fonctionnalité est ajoutée appelée liaison statique retardée. Cela peut nous aider à réaliser le polymorphisme et à résoudre les problèmes ci-dessus. En termes simples, la liaison statique retardée signifie que lorsque nous appelons une méthode héritée avec le mot-clé static, elle sera liée à la classe appelante au moment de l'exécution. Dans l'exemple ci-dessus, si nous utilisons une liaison statique retardée (static), cela signifie que lorsque nous appelons "Mercedes::model();", la méthode getModel de la classe Mercedes sera appelée. Parce que Mercedes est notre classe d'appel. Exemple de liaison retardée

class Car{
    public static function model()
    {
         static::getModel();
    }    protected static function getModel()
    {
        echo "I am a Car!";
    }

}
Copier après la connexion

Nous venons de remplacer nous-mêmes en classe Car par des statiques et n'avons pas modifié la classe Mercedes.

Maintenant, nous appelons

Mercedes::model();
Copier après la connexion

pour obtenir le résultat

I am a Mercedes!
Copier après la connexion
Copier après la connexion

Les versions inférieures à PHP 5.3 ne peuvent pas utiliser la liaison statique retardée

Notez que les versions antérieures à PHP 5.3 ne peuvent pas utiliser liaison statique retardée. Si vous essayez d'exécuter l'exemple ci-dessus sur une version inférieure à PHP 5.3, une erreur sera signalée.

Self et static en php

Maintenant, nous remplaçons self dans l'exemple par static. Vous pouvez voir que la différence entre les deux est la suivante : self fait référence à la méthode de la classe actuelle (classe actuelle), tandis que static permet aux appels de fonction de lier les méthodes de la classe appelante au moment de l'exécution.

Apprentissage recommandé : "

Tutoriel vidéo 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!

Étiquettes associées:
source:php.cn
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