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

WBOY
Libérer: 2016-05-16 09:00:14
original
2719 Les gens l'ont consulté

En programmation orientée objet PHP, vous rencontrerez toujours

class test{
 public static function test(){
  self::func();

  static::func();
 }

 public static function func(){}
}

Copier après la connexion

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";
 }
}

Copier après la connexion

Voiture::model();

Class Taxi extends Car
{
 protected static function getModel(){
  echo "This is a Taxi model";
 }
}

Copier après la connexion

Taxi::model();
Obtenir le résultat

This is a car model
This is a car model
Copier après la connexion

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();

Copier après la connexion

Obtenir une sortie

This is a car model
This is a Taxi model
Copier après la connexion

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.

Étiquettes associées:
php
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
À 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!