Heim  >  Artikel  >  Backend-Entwicklung  >  Der Unterschied zwischen self und static in der objektorientierten PHP-Programmierung_php-Fähigkeiten

Der Unterschied zwischen self und static in der objektorientierten PHP-Programmierung_php-Fähigkeiten

WBOY
WBOYOriginal
2016-05-16 09:00:142752Durchsuche

Bei der objektorientierten PHP-Programmierung werden Sie immer auf

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

  static::func();
 }

 public static function func(){}
}

Aber kennen Sie den Unterschied zwischen Selbst und Statik?

Tatsächlich ist der Unterschied sehr einfach. Sie müssen nur ein paar Demos schreiben, um zu verstehen:

Demo für sich selbst:

class Car
{
 public static function model(){
  self::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();
Ausgabe erhalten

This is a car model
This is a car model

Sie können feststellen, dass self immer noch die Methode der übergeordneten Klasse in der Unterklasse aufruft

Demo für Statik

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

Ausgabe erhalten

This is a car model
This is a Taxi model

Sie können sehen, dass beim Aufrufen von static die Methode, die in der Methode der übergeordneten Klasse aufgerufen wird, immer noch die Methode der Unterklasse ist (so verwirrend ...), auch wenn die Unterklasse die Methode der übergeordneten Klasse aufruft.

Vor der PHP5.3-Version gab es noch einen kleinen Unterschied zwischen statisch und selbst. Was genau war das? Schließlich wurden sie alle von Version 7 dominiert. Ich werde es nicht mehr verstehen.

Die Zusammenfassung lautet: self kann nur auf Methoden in der aktuellen Klasse verweisen, und das Schlüsselwort static ermöglicht es Funktionen, Methoden in der Klasse zur Laufzeit dynamisch zu binden.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn