Heim > Backend-Entwicklung > PHP-Tutorial > PHP OOP Part-Static-Eigenschaft, Methode und this vs. self

PHP OOP Part-Static-Eigenschaft, Methode und this vs. self

Patricia Arquette
Freigeben: 2025-01-04 16:36:41
Original
677 Leute haben es durchsucht

PHP OOP Part-Static property, method and this vs self

In dieser Serie werde ich die Grundlagen der objektorientierten PHP-Programmierung (OOP) behandeln. Der Inhalt wird in aufeinanderfolgende Teile gegliedert, die sich jeweils auf ein bestimmtes Thema konzentrieren. Wenn Sie ein Anfänger sind oder mit OOP-Konzepten nicht vertraut sind, soll diese Serie Sie Schritt für Schritt anleiten. In diesem Teil werde ich über die statische Eigenschaft, die Methode und this vs. self in PHP diskutieren. Beginnen wir gemeinsam die Reise zum Erlernen von PHP OOP!

Was ist Eigenschaft und Methode?

Lassen Sie uns zunächst versuchen, Eigenschaften und Methoden zu verstehen. Wenn wir mit einer Klasse mehrere Objekte erstellen, wird jedem Objekt ein separater Speicherort zugewiesen. Dadurch werden alle Eigenschaften und Methoden dieses Objekts auch diesem bestimmten Speicherort zugewiesen.

Das bedeutet, dass, wenn wir eine Eigenschaft eines Objekts ändern, die Änderung nur auf dieses bestimmte Objekt beschränkt ist. Es wirkt sich nicht auf andere Objekte aus, da die Eigenschaften und Methoden einer Klasse mit den jeweiligen Objekten dieser Klasse verknüpft sind.

Um von außerhalb der Klasse auf diese Eigenschaften oder Methoden zuzugreifen, müssen wir ein Objekt dieser Klasse erstellen. Wenn wir jedoch innerhalb der Klasse auf diese Eigenschaften oder Methoden zugreifen möchten, können wir das Schlüsselwort $this verwenden. Das Schlüsselwort $this repräsentiert das aktuelle Objekt der Klasse. Wir werden später mehr über das Schlüsselwort $this erfahren. Schauen wir uns das folgende Beispiel an:

Codebeispiel

class Car
{
   public $name;
   public $color;

   function __construct(string $name, string $color)
   {
      $this->name  = $name;
      $this->color = $color;
   }

   public function getValue()
   {
      echo "Car name: $this->name\n";
      echo "Car color: $this->color\n";
   }
}

$tesla = new Car('Zip', 'Blue');
$tesla->getValue();
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Beispiel können wir sehen, dass wir für den Zugriff auf die Eigenschaften der Klasse das Schlüsselwort $this innerhalb der Methoden derselben Klasse verwendet haben. Um eine beliebige Methode dieser Klasse von außen nutzen zu können, haben wir ebenfalls ein Objekt der Klasse erstellt. Auf diese Weise verwenden wir normalerweise die normalen Eigenschaften oder Methoden einer Klasse.

Was sind statische Eigenschaften und Methoden?

Statische Eigenschaften oder Methoden funktionieren jedoch anders. Wenn wir eine Klasse definieren, wird ihr nur einmal ein Speicherort zugewiesen. Wenn wir statische Eigenschaften oder Methoden in einer Klasse definieren, werden diese ebenfalls einem bestimmten Speicherort neben der Klasse selbst zugewiesen, jedoch nur einmal.

Wenn wir später eine statische Eigenschaft oder Methode ändern, wirkt sich die Änderung daher auf alle Instanzen der Klasse aus. Mit anderen Worten: Wo auch immer die statische Eigenschaft oder Methode verwendet wird, ist ihr aktualisierter Wert verfügbar.

Wenn wir von außerhalb der Klasse auf statische Eigenschaften oder Methoden zugreifen möchten, können wir den :: (Bereichsauflösungsoperator) verwenden, ohne ein Objekt zu erstellen. Alternativ können wir auch nach dem Anlegen eines Objekts darauf zugreifen. Um innerhalb der Klasse darauf zuzugreifen, können wir das Schlüsselwort self oder den Klassennamen selbst verwenden. Hier stellt das Schlüsselwort self die Klasse dar.

Wir werden das Schlüsselwort self später genauer untersuchen. Schauen wir uns das folgende Beispiel an:

Codebeispiel

class Car
{
   public $name;
   public $color;

   function __construct(string $name, string $color)
   {
      $this->name  = $name;
      $this->color = $color;
   }

   public function getValue()
   {
      echo "Car name: $this->name\n";
      echo "Car color: $this->color\n";
   }
}

$tesla = new Car('Zip', 'Blue');
$tesla->getValue();
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Beispiel können wir sehen, dass wir für den Zugriff auf die statischen Eigenschaften der Klasse das Schlüsselwort self innerhalb der Methoden derselben Klasse verwendet haben. Um außerdem eine statische Methode von außerhalb der Klasse zu verwenden, haben wir ein Objekt der Klasse erstellt. Wir könnten jedoch auch direkt darauf zugreifen, indem wir den Klassennamen zusammen mit dem :: (Bereichsauflösungsoperator) verwenden, ohne ein Objekt zu erstellen. Auf diese Weise verwenden wir normalerweise die statischen Eigenschaften oder Methoden einer Klasse.

Im obigen Beispiel können wir sehen, dass wir mit der Car-Klasse zwei Objekte, $toyota und $bmw, mit unterschiedlichen Daten erstellt haben. Nun wollen wir auf die Werte dieser Objekte zugreifen. Wenn wir den obigen Code ausführen, sehen wir die folgende Ausgabe:

Codebeispiel

class Car
{
   public static $name;
   public static $color;

   function __construct($name, $color)
   {
      self::$name = $name;
      self::$color = $color;
   }

   public static function getValue()
   {
      echo "Car name: " . self::$name . "\n";
      echo "Car color: " . self::$color . "\n";
   }
}

$toyota = new Car('Toyota', 'Black');
$bmw = new Car('BMW', 'Orange');

$toyota::getValue();
$bmw::getValue();

Car::getValue();
Nach dem Login kopieren
Nach dem Login kopieren

Wir können sehen, dass beide Objekte die gleichen Werte anzeigen. Mit anderen Worten: Die Werte, die wir erhalten, stammen vom zuletzt erstellten Objekt. Selbst wenn wir versuchen, direkt über die Klasse auf die Werte zuzugreifen, erhalten wir immer noch dieselben Werte, d. h. die Werte des zweiten Objekts.

Der Grund dafür ist ganz klar. Wie bereits erwähnt, werden statische Eigenschaften oder Methoden an einem einzigen Speicherort erstellt. Wenn die statischen Eigenschaften oder Methoden von irgendwoher geändert werden, wirkt sich die Änderung auf alle Instanzen der Klasse aus.

Als wir im obigen Beispiel das zweite Objekt erstellten, änderten sich die Werte der Eigenschaften, sobald das Objekt erstellt wurde. Diese Änderung wirkte sich auch auf das zuvor erstellte Objekt aus, da alle Objekte der Klasse dieselben statischen Eigenschaften oder Methoden verwenden.

Es ist wichtig zu bedenken, dass statische Eigenschaften oder Methoden einer Klasse nicht auf die gleiche Weise wie normale Klasseneigenschaften oder -methoden verwendet werden können. Sie können nicht mit dem Operator → darauf zugreifen. Stattdessen müssen Sie den ::(Bereichsauflösungsoperator) verwenden, unabhängig davon, ob Sie von innerhalb oder außerhalb der Klasse darauf zugreifen.

Schlüsselwort $this vs. self

Was ist $this?

Wir haben bereits die Verwendung der Schlüsselwörter $this und self gesehen. Lassen Sie uns nun tiefer in diese Konzepte eintauchen, um sie besser zu verstehen.

$this ist ein integriertes PHP-Schlüsselwort. Wenn wir ein oder mehrere Objekte mithilfe einer Klasse erstellen, kann auf die normalen Eigenschaften und Methoden, die in der Klasse definiert sind, mit dem Schlüsselwort $this innerhalb der Klasse zugegriffen werden.

Jetzt wissen wir, dass eine definierte Klasse nur einmal einem bestimmten Speicherort zugewiesen wird. Dies könnte die Frage aufwerfen: Wenn wir mehrere Objekte aus dieser Klasse erstellen, greift das Schlüsselwort $this dann nur einmal für alle Objekte auf die Eigenschaften oder Methoden zu?

Die Antwort ist „Nein“. Dies liegt daran, dass das Schlüsselwort $this, wie wir bereits besprochen haben, nicht die Klasse selbst darstellt, sondern das von dieser Klasse erstellte Objekt. Mit anderen Worten, $this steht in direktem Zusammenhang mit dem Objekt. Infolgedessen greift das Schlüsselwort $this für jedes erstellte Objekt für jedes Objekt separat auf die Eigenschaften und Methoden der Klasse zu. Schauen wir uns das folgende Beispiel an:

class Car
{
   public $name;
   public $color;

   function __construct(string $name, string $color)
   {
      $this->name  = $name;
      $this->color = $color;
   }

   public function getValue()
   {
      echo "Car name: $this->name\n";
      echo "Car color: $this->color\n";
   }
}

$tesla = new Car('Zip', 'Blue');
$tesla->getValue();
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Im vorherigen Beispiel haben wir es mehrmals verwendet, aber die Verwendung von $this wurde nicht im Detail besprochen. Nachdem wir nun ein gewisses Verständnis von $this gewonnen haben, können wir seine Verwendung besser verstehen. Mit dieser Klasse haben wir Objekte erstellt. Jetzt verstehen wir, dass das Schlüsselwort $this für jedes Objekt separat auf die Eigenschaften zugreift.

Es ist jedoch wichtig zu beachten, dass das Schlüsselwort $this nicht innerhalb einer statischen Methode verwendet werden kann. Warum es nicht verwendet werden kann, wird in Kürze erklärt.

Was ist das Schlüsselwort self?

Wir wissen bereits, dass eine Klasse beim Definieren nur einmal einem Speicherort zugewiesen wird. Ebenso werden alle statischen Eigenschaften und Methoden innerhalb dieser Klasse zusammen mit der Klasse nur einmal dem Speicherort zugewiesen.

Wenn wir Objekte mit dieser Klasse erstellen, werden die statischen Eigenschaften oder Methoden daher nicht für jedes Objekt separat erstellt. Aus diesem Grund können wir mit dem Schlüsselwort $this nicht auf diese statischen Eigenschaften oder Methoden zugreifen. Das Schlüsselwort $this stellt das Objekt der Klasse dar, und da statische Eigenschaften oder Methoden sich nicht auf ein Objekt, sondern direkt auf die Klasse selbst beziehen, kann mit $this nicht auf sie zugegriffen werden.

Um auf statische Eigenschaften oder Methoden innerhalb der Klasse zuzugreifen, verwenden wir das Schlüsselwort self oder den Klassennamen zusammen mit dem ::(Bereichsauflösungsoperator). Dies liegt daran, dass das Schlüsselwort self die Klasse selbst darstellt. Schauen wir uns das folgende Beispiel an:

class Car
{
   public static $name;
   public static $color;

   function __construct($name, $color)
   {
      self::$name = $name;
      self::$color = $color;
   }

   public static function getValue()
   {
      echo "Car name: " . self::$name . "\n";
      echo "Car color: " . self::$color . "\n";
   }
}

$toyota = new Car('Toyota', 'Black');
$bmw = new Car('BMW', 'Orange');

$toyota::getValue();
$bmw::getValue();

Car::getValue();
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Beispiel sehen wir, dass wir mithilfe des Klassennamens oder des Schlüsselworts self mit dem ::scope-Auflösungsoperator problemlos auf statische Mitglieder innerhalb einer nicht statischen Methode zugreifen können, da sie mit der Klasse verknüpft sind. Um auf sie zuzugreifen, müssen wir daher kein separates Objekt erstellen.

Wenn wir jedoch innerhalb einer statischen Methode auf nicht statische Mitglieder zugreifen möchten, müssen wir das Schlüsselwort $this verwenden. Wir wissen jedoch, dass das Schlüsselwort $this nicht innerhalb einer statischen Methode verwendet werden kann, da $this mit dem Objekt verknüpft ist, während nicht-statische Elemente nicht mit dem Objekt verknüpft sind. Aus diesem Grund können wir das Schlüsselwort $this nicht innerhalb einer statischen Methode verwenden.

Wenn wir jedoch auf nicht statische Mitglieder innerhalb einer statischen Methode zugreifen müssen, können wir eine Instanz oder ein Objekt der Klasse innerhalb der statischen Methode erstellen und dann das Schlüsselwort $this verwenden, um darauf zuzugreifen, wie im obigen Beispiel gezeigt .

Ich hoffe, dass Ihnen dies ein klareres Verständnis für die Verwendung der Schlüsselwörter „$this“ und „self“ vermittelt. Das ist alles für heute; wir machen in der nächsten Lektion weiter.

Sie können sich mit mir auf GitHub und Linkedin verbinden.

Das obige ist der detaillierte Inhalt vonPHP OOP Part-Static-Eigenschaft, Methode und this vs. self. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage