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

La différence entre self et static dans les compétences de programmation orientée objet php_php

WBOY
WBOYoriginal
2016-05-16 09:00:142784parcourir

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.

Déclaration:
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