Einführung in die Unterschiede und Verwendung zwischen new static() und new self()

伊谢尔伦
Freigeben: 2023-03-11 08:04:01
Original
1566 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die Analyse der Unterschiede und Ähnlichkeiten zwischen new static und new self() in PHP vorgestellt. Ich glaube, dass es Vorteile bringen kann Jeder lernt PHP-Programmierung.

Das Problem wird durch den lokalen Aufbau einer Website verursacht. Ich habe festgestellt, dass es nicht mit PHP 5.2 erstellt werden kann. Der PHP-Code der Website enthält viele Teile, die über 5.3 liegen und Änderungen erfordern, um unter 5.2 ausgeführt zu werden.

Nachdem ich den Ort gewechselt hatte, habe ich einen Platz gefunden

return new static($val);
Nach dem Login kopieren

Dieses verdammte Pferd ist unglaublich, ich habe es bisher nur gesehen

return new self($val);
Nach dem Login kopieren

Also habe ich online nachgeschaut und die beiden sind unterschiedlich.

self – Das ist diese Klasse, diese Klasse im Codesegment.

statisch – PHP 5.3 fügt nur die aktuelle Klasse hinzu, was ein bisschen wie $this ist. Es wird aus dem Heap-Speicher extrahiert und greift auf die aktuell instanziierte Klasse zu, sodass static diese Klasse darstellt.

Werfen wir einen Blick auf die professionelle Erklärung des Ausländers:

self bezieht sich auf dieselbe Klasse, in deren Methode die neue Operation stattfindet.

statisch in PHP 5.3 Statische Bindungen beziehen sich auf jede Klasse in der Hierarchie, für die Sie die Methode aufrufen.

Im folgenden Beispiel erbt B beide Methoden von A. self ist an A gebunden, da es in der Implementierung der ersten Methode durch A definiert ist. wohingegen static an die aufgerufene Klasse gebunden ist (siehe auch get_claimed_class() ).

class A {
  public static function get_self() {
    return new self();
  }

  public static function get_static() {
    return new static();
  }
}

class B extends A {}

echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A
Nach dem Login kopieren

Dieses Beispiel ist grundsätzlich auf einen Blick verständlich.

Ich verstehe das Prinzip, aber das Problem ist noch nicht gelöst. Wie kann ich das Problem der Rückgabe von new static($val); lösen?

Tatsächlich ist es so einfach wie die Verwendung von get_class($this); Der Code lautet wie folgt:

class A {
  public function create1() {
    $class = get_class($this);
    return new $class();
  }
  public function create2() {
    return new static();
  }
}

class B extends A {

}

$b = new B();
var_dump(get_class($b->create1()), get_class($b->create2()));

/*
The result 
string(1) "B"
string(1) "B"
*/
Nach dem Login kopieren

Interessierte Freunde können den Beispielcode testen und ich glaube, es wird neuen geben Gewinne!

Das obige ist der detaillierte Inhalt vonEinführung in die Unterschiede und Verwendung zwischen new static() und new self(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage