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.
L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 7.1, ordinateur DELL G3
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!"; } }
Appelez la méthode statique
Car::model();
et obtenez le résultat
I am a Car!
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!"; } }
Quand on appelle Mercedes::model(), devinez quel est le résultat ?
Peut-être pensez-vous que le résultat sera :
I am a Mercedes!
Mais le résultat réel est :
I am a Car!
Pourquoi est-ce ?
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.
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!"; } }
Maintenant, nous appelons
Mercedes::model();
pour obtenir le résultat
I am a Mercedes!
Les versions inférieures à PHP 5.3 ne peuvent pas utiliser la liaison statique retardée
Self et static en php
Apprentissage recommandé : "
Tutoriel vidéo PHPCe 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!