Maison >développement back-end >tutoriel php >La différence entre self et static dans les compétences de programmation orientée objet php_php
En programmation orientée objet PHP, vous rencontrerez toujours
class test{ public static function test(){ self::func(); static::func(); } public static function func(){} }
Mais connaissez-vous la différence entre soi et statique ?
En fait, la différence est très simple Il suffit d'écrire quelques démos pour comprendre :
Démo pour soi :
class Car { public static function model(){ self::getModel(); } protected static function getModel(){ echo "This is a car model"; } }
Voiture::model();
Class Taxi extends Car { protected static function getModel(){ echo "This is a Taxi model"; } }
Taxi::model();
Obtenir le résultat
This is a car model This is a car model
Vous pouvez constater que self appellera toujours la méthode de la classe parent dans la sous-classe
Démo pour statique
class Car { public static function model(){ static::getModel(); } protected static function getModel(){ echo "This is a car model"; } } Car::model(); Class Taxi extends Car { protected static function getModel(){ echo "This is a Taxi model"; } } Taxi::model();
Obtenir une sortie
This is a car model This is a Taxi model
Vous pouvez voir que lors de l'appel de static, même si la sous-classe appelle la méthode de la classe parent, la méthode appelée dans la méthode de la classe parent sera toujours la méthode de la sous-classe (donc déroutante...)
Avant la version PHP5.3, il y avait encore une petite différence entre static et self. De quoi s'agissait-il exactement ? Après tout, ils étaient tous régis par la version 7. Je ne comprendrai plus.
Le résumé est le suivant : self ne peut faire référence qu'aux méthodes de la classe actuelle, et le mot-clé static permet aux fonctions de lier dynamiquement les méthodes de la classe au moment de l'exécution.